Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Как в Spring 3 задавать при сериализации в JSON другой Content-Type, либо отлавливать любой ответ с сервера на клиенте в ExtJS?

#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);

Комментариев нет:

Отправить комментарий