• Spring SpringMVC文件上传错误(二)


    续上文,


    场景:

    不上传文件提交表单。


    简述一下:表单请求的两种方式

    1. 同步提交
    2. 异步提交

    笔者之前写过的测试Demo:

    HTML:

    <form action="upload.do" method="post" enctype="multipart/form-data">  
        <input type="file" name="fileName" />
        <input type="submit" value="Submit" />
    </form>  

    控制器:

    @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> add(@RequestParam(value="fileName") MultipartFile file){
        //...
        return null;
    }

    错误信息:

    11:03:07.147 [http-nio-8080-exec-4] DEBUG o.s.w.s.m.a.AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [com.xFee.serverAdmin.controller.ApkInfoController@25a5db]: org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile]: no matching editors or conversion strategy found
    11:03:07.147 [http-nio-8080-exec-4] DEBUG o.s.w.s.m.a.ResponseStatusExceptionResolver - Resolving exception from handler [com.xFee.serverAdmin.controller.ApkInfoController@25a5db]: org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile]: no matching editors or conversion strategy found
    11:03:07.147 [http-nio-8080-exec-4] DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolving exception from handler [com.xFee.serverAdmin.controller.ApkInfoController@25a5db]: org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile]: no matching editors or conversion strategy found
    11:03:07.147 [http-nio-8080-exec-4] DEBUG o.s.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'springServlet': assuming HandlerAdapter completed request handling
    11:03:07.147 [http-nio-8080-exec-4] DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request

    笔者忽略了,在同步提交的时候,Spring把空上传是做null来处理的,而在异步提交的时候,Spring把文件域的值当作空字符串看待的。在Spring做请求转换的时候(request–>MultipartHttpServletRequest)底层的TypeConverter接口实现对null""是做了不同操作的。源码就不贴了,有兴趣的伙伴可以自行从:org.springframework.web.multipart.commons.CommonsMultipartResolver
    这个类跟下去,就会发现差异。

    解决方案

    在配置文件中加入以下配置:

        <bean id="conversionService"
            class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <list>
                    <bean class="com.xFee.serverAdmin.utils.SpringMVCFileConverter"></bean>
                </list>
            </property>
        </bean>
        <mvc:annotation-driven conversion-service="conversionService" />

    然后在list下的bean节点的class属性的路径下创建一个SpringMVCFileConverter

    public class SpringMVCFileConverter implements Converter<String, MultipartFile>  {
    
        public SpringMVCFileConverter() {
            super();
        }
    
        @Override
        public MultipartFile convert(String source) {
            return null;
        }
    }

    注:注意在引入上面配置文件的时候不要忘记引入其定义及约束文件。

    学生浅薄,望众师指点
    
    wengang.liu 
    学生浅薄 望众师指点
  • 相关阅读:
    关于Oracle过程,函数的经典例子及解析
    describeType的使用
    Flash Pro CS5无法跳过注册Adobe ID的问题
    DOM的滚动
    Flex的LogLogger类
    浏览器无法打开Google服务
    as3中颜色矩阵滤镜ColorMatrixFilter的使用
    仿Google+相册的动画
    Flex中ModuleManager的一个bug
    有序的组合
  • 原文地址:https://www.cnblogs.com/Nihility/p/14695675.html
Copyright © 2020-2023  润新知