2016-06-29 4 views
1

У меня есть веб-приложение, которое делает вызов HEAD перед выполнением фактического вызова GET. Метод GET создает приложение/json. Когда появляется ошибка (500), тип содержимого HEAD изменяется на text/html. Для той же ошибки тип контента для GET остается application/json. Есть ли способ переопределить тип содержимого, возвращаемый в HEAD. Вот как я формирую ответ. Это реализация jersery.Переопределить тип содержимого для запроса HEAD

Response.status(errorStatus)entity(some json).build() 

ответ

0

Маниш.

Бьюсь об заклад, org.apache.catalina.valves.ErrorReportValve подавляет ваш ответ.

Взгляните на метод «отчета» этого класса. Если ответ 4xx или 5xx и это не имеет никакого содержания (т.е. не лица - что ответ ГОЛОВЫ не имеет) (строка 153), а затем ... ErrorReportValve::report::153

установить content-type в text/html (строка 283). Ваш ответ только что был раздавлен, но ... ErrorReportValve::report::283

ErrorReportValve ничего не делает для ответа, если он уже был зафиксирован (строка 102). ErrorReportValve::invoke::102

Так, может быть, попробуйте создать фильтр сервлета, который передает ответ до того, как ErrorReportValve выкинет его? Что-то вроде этого https://gist.github.com/danmork/bf8c468141fa004298928a1ad9b31746, может быть?

+0

Спасибо Dan. Это решило мою проблему. Я все еще удивляюсь, почему он отменяет ответ в строке 283. – Manish

+0

Хороший вопрос. Я не уверен. Мое лучшее предположение состоит в том, что они, вероятно, думали о том, что делать, когда случаются исключения, прежде чем обработчик (сервлет) смог написать что-либо в буфер (следовательно, проверка на отсутствие содержимого). Похоже, что не удалось проверить метод запроса (например, HEAD). –

 Смежные вопросы

  • Нет связанных вопросов^_^