【发布时间】:2011-08-11 09:20:16
【问题描述】:
我正在使用 ExtJS 4 前端和 Spring 3 作为后端创建文件上传。文件上传有效,但服务器的响应内容类型错误。当我使用 Jackson 序列化的Map<String, Object> 发送{success:true} 时,ExtJS 返回错误
Uncaught Ext.Error: You're trying to decode an invalid JSON String: <pre style="word-wrap: break-word; white-space: pre-wrap;">{"success":true}</pre>
为什么我的回复被<pre> 标签包裹?我已经搜索了 found out,例如我应该将响应类型更改为 text/html。但是changing content type in servlet response 没有帮助
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> upload(
FileUpload uploadItem, BindingResult result, HttpServletResponse response) {
response.setContentType("text/html");
// File processing
Map<String, Object> jsonResult = new HashMap<String, Object>();
jsonResult.put("success", Boolean.TRUE);
return jsonResult;
}
当我将upload 方法的返回值更改为String 时,一切正常,但我想返回Map 并让Jackson 对其进行序列化
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody String upload(
FileUpload uploadItem, BindingResult result, HttpServletResponse response) {
// File processing
return "{success:true}";
}
我的 Spring 配置
<bean
id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
</bean>
<bean
id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
<ref bean="stringHttpMessageConverter" />
</list>
</property>
</bean>
如何告诉Spring返回正确的内容类型?当其他方法的响应被正确解释时,为什么这个方法的响应不正确?
【问题讨论】:
-
你解决了吗?你会分享你的解决方案吗?ty
-
@astrocybernaute 看到我的回答。我希望它会有所帮助
标签: json spring extjs upload response