Я создавал загрузку файлов, используя внешний интерфейс ExtJS 4 и Spring 3 в качестве внутреннего. Загрузка файла работает, но ответ с сервера имеет неправильный тип содержимого. Когда я посылаю {success:true}
, используя Map<String, Object>
, сериализованный Джексоном, ExtJS возвращает ошибку
<code>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>
? Я искал и обнаружил , что я должен изменить тип ответа, например, на text/html
. Но изменение типа контента в ответе сервлета не помогло
@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
и сделать его сериализованным Джексоном
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody String upload(
FileUpload uploadItem, BindingResult result, HttpServletResponse response) {
// File processing
return "{success:true}";
}
Конфигурация My 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, чтобы он возвращал правильный тип содержимого? Почему ответ этого метода неверен, если ответ других методов интерпретируется правильно?