【发布时间】:2011-03-16 02:46:20
【问题描述】:
我们希望实施“fault barrier”策略来管理应用程序中的异常。我们的应用程序拥有的一件事是“回传”响应的概念,基本上是无操作,我们希望优先返回它而不是抛出 500、400 等 HTTP 状态代码 - 例如我们面向外部的应用程序应始终返回有效响应,即使引发了底层异常 - 我们希望在应用程序内部处理该异常,并仍返回有效的 noop 响应。
我们的第一个实现是一个 Servlet 过滤器,它将所有请求包装在一个 try/catch 块中,并从 catch 返回默认返回,例如:
try{
chain.doFilter()
} catch (Throwable t) {
generatePassbackResponse(HttpServletRequest req, HttpServletResponse res)
}
虽然这主要是可行的,而且感觉很好很干净(我们可以返回漂亮的文本,适当地设置内容/类型等),但一个问题似乎是,当抛出异常时,响应仍然通过 Status-代码:500。
HttpServletResponse.setStatus(200) 没有效果,javadoc 确实说它只适用于正常请求。
我们的第二个实现想法是我们可能必须转发到另一个页面,或者将 errorPage 插入 web.xml 并手动将错误发送到该页面 - 尽管我们对是否有人有具体建议感兴趣。
【问题讨论】:
标签: java http exception servlets exception-handling