打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring MVC ExtJS4文件上传

做文件上传的时候遇到点麻烦,ExtJS上传文件要求服务器端返回的ContentType是“text/html”,而Spring MVC默认返回的是“application/json”,于是ExtJS这边总是报错说无法将"<pre>{success: true}</pre>"转换成JSON,很奇怪的一件事就是:为什么会出现pre标签呢?

先看看当前服务器端的代码:

12345678
public @ResponseBody Map<String, Object> upload(UserVO userVO){	Map<String, Object> modelMap = new HashMap<String, Object>();	if(!userVO.getUserPhoto().isEmpty()){		userVO.getUserPhoto().transferTo(new File("文件存放路径"));	}	modelMap.put("success", true);	return modelMap;}

用上面这种方式处理的时候,文件上传了成功了,但是就会出现文章开头所描述的问题,于是我改成这样:

123456
public void upload(UserVO userVO, HttpServletResponse response){	String json = "{success: true}";	response.setContentType("text/html");	response.getWriter().write(json);	response.flushBuffer();}

现在,ExtJS不会报错了,也成功触发了Form的success事件,但是服务器端又报错了,说是无法找到"upload.jsp",其实我请求的是"upload.action",而且也成功响应了,但是不知道为什么,Spring貌似是将"action"替换成"jsp"又转发跳转了一下,百度谷歌无解!
其实,最最主要的就是能够将response的ContextType设置为“text/xml”就没问题了。参考Spring的文档找到解决办法如下:
方法一:

123456
public ResponseEntity<String> upload(UserVO userVO){	String json = "{success: true}";	HttpHeaders responseHeaders = new HttpHeaders();	responseHeaders.setContentType(MediaType.TEXT_HTML);	return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);}

方法二:
先在messageConverters中配置StringHttpMessageConverter:

1234567891011
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">		<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer" />	</property>	<property name="messageConverters">		<list>			<bean class = "org.springframework.http.converter.StringHttpMessageConverter"> 				<property name="supportedMediaTypes" value="text/html;charset=UTF-8" /> 			</bean>		</list>	</property></bean>

然后在这样就OK了(注意:方法的返回类型必须是String):

1234
public @ResponseBody String upload(UserVO userVO){	String json = "{success: true}";	return json;}

参考文档:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html
再补充一个可行的方法三:

1234567
public void upload(HttpServletResponse response, UserVO userVO){		Map<String, Object> result = new HashMap<String, Object>(0);		result.put("success", true);		response.setContentType("text/html");		ObjectMapper mapper = new ObjectMapper();		mapper.writeValue(response.getOutputStream(), result);}

问题解决了,但是还是不知道到底是哪出现的pre标签。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
HTTP客户端连接,选择HttpClient还是OkHttp?
spring mvc3中使用json的版本问题,只能用1.0.0!
十四、转发与重定向 十五、处理ajax请求
Spring MVC 4.0 RESTFul Web Service JSON Response with @ResponseBody | ProgrammingFree
文件的上传(表单上传和ajax文件异步上传)
Spring MVC 3.2.2 +easyui 返回JSON数据格式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服