#spring #javascript #java #extjs
Здравствуйте.
Столкнулся с такой задачей:
Использую в разработке Ext Js 3.1 и Spring 3. Используя функцию
fp.getForm().submit({
url: 's3/uploadform.form',
waitMsg: 'Загрузка файла...',
success: function(fp, o){
msg('Success', 'Загрузка завершена');
}
});
Ext JS отправляет данные на сервер, где происходят нужные операции, и клиент ждет
от сервера ответ
{success:true}
В Spring 3 есть удобная вещь, которая автоматически сериализует возвращаемые объекты
в JSON при помощи библиотеки jackson. Для удобства, я создал объект со всеми нужными
полями плюс поле boolean success. Он прекрасно срабатывает, и отправляет назад клиенту
{"success":true, "anyField":"anyString"}
При этом используется подобная функция:
@RequestMapping(value = "/uploadform.form", method = RequestMethod.POST)
public @ResponseBody
TransactionResultMessage uploadForm(@Valid ImportXfd xfd,
BindingResult validationResults) {
/*
Тут все что надо и возвращение моего объекта
TransactionResultMessage
*/
}
И Ext JS не хочет принимать это.
В консоли ошибок JavaScript браузера, выводится
Resource interpreted as Document but transferred with MIME type application/json.
Такое выводится в google chrome. Mozilla вообще с какого-то этапа стала предлагать
сохранить пришедший ответ с сервера на диске. Тут, как я начал понимать, ExtJs ругается
на то, что приходит тип application/json. Но этот MIME тип генерирует Spring, и у меня,
логически, нет доступа к этому. Так вот новый вопрос:
Как мне сделать Content-type, отправляемый с сервера, типа text/html, либо
принимать любой ответ с сервера как текстовый?
Заранее спасибо.
Ответы
Ответ 1
Как утверждают доки ExtJS, форма ожидает text/html и с этим, видимо, ничего не поделать. Но можно попробовать возвращать с сервера в методе обработчике бин, обернутый в ResponseEntity: TransactionResultMessage message; // Тут все что надо HttpHeaders headers = new HttpHeaders(); headers.setContentType(new MediaType("text", "html", Charset.forName("UTF-8"))); return new ResponseEntity(message, headers, HttpStatus.OK);
Комментариев нет:
Отправить комментарий