您的位置:首页 > 编程语言 > Java开发

Spring SpringMVC文件上传错误(二)

2016-05-06 16:38 841 查看
续上文,

场景:

不上传文件提交表单。

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

同步提交

异步提交

笔者之前写过的测试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
编辑于:2016/5/6 17:18:07
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: