Мы хотели бы реализовать "стратегию" барьера отказа руководящих исключений в наших приложениях. Одной вещью, которую имеют наши приложения, является понятие "passback" ответа, в основном не, который мы хотели бы возвратить в предпочтении к броску 500, 400, и т.д. Коды состояния HTTP - например, наши внешние приложения направления должны всегда возвращать допустимый ответ, даже если бы базовое исключение было выдано то - мы хотели бы обработать это внутреннее к приложению и все еще возвратить допустимый noop ответ.
Наша первая реализация была Фильтром Сервлета, который перенесет все запросы в блок попытки/выгоды и возвратит возврат по умолчанию из выгоды, например:
try{
chain.doFilter()
} catch (Throwable t) {
generatePassbackResponse(HttpServletRequest req, HttpServletResponse res)
}
В то время как это главным образом работает, и чувствует себя прекрасно и чувствует себя чистым (мы можем возвратить хороший текст, установить содержание/тип соответственно, и т.д.), одна проблема, кажется, что, когда Исключение выдается, ответ все еще проникает с Кодом состояния: 500.
HttpServletResponse.setStatus (200) не имеет эффекта, и javadoc действительно говорит, что только применяется на нормальные запросы.
Наша вторая реализация думала, нам, вероятно, придется передать другой странице или включить errorPage в web.xml и вручную sendError к той странице - хотя мы интересуемся тем, есть ли у кого-либо определенная рекомендация.
Разве вы не можете просто использовать стандартную конфигурацию web.xml:
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<location>/error.jsp</location>
<exception-type>java.lang.Exception</exception-type>
</error-page>
Я не понимаю, что еще вы пытаетесь сделать, чего это еще не касается? Если это просто код ошибки, я думаю, вы можете установить это с помощью объекта ответа.