#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);
Комментариев нет:
Отправить комментарий