0

我的技术栈是 Tomcat (servlet 3.0)、Jersey for JAX-RS、Spring 和 Hibernate。当出现意外错误时,例如 Hibernate 中的某些数据转换错误,我不希望客户端看到我的堆栈跟踪,以了解 Tomcat 默认尝试打印的那些异常。但是,我想记录这些异常,以便找出问题所在并进行修复。

我的第一次尝试是使用来自 JAX-RS 的 ExceptionMapper 并且天真地认为这可以解决我的问题。但后来我注意到 Jersey 抛出了它自己的异常,例如未映射的 url 是 com.sun.jersey.api.NotFoundExceptions。这会导致记录我不想要的 404 异常。更糟糕的是,客户端不再获得 404,而是状态码 500。

我可以为球衣抛出的异常创建异常映射器,但我可能会错过一些东西。有这样的最佳实践吗?

4

2 回答 2

7

Jersey 直接抛出的所有异常都是 WebApplicationException 的子类,因此如果您想全部捕获它们,只需为该类创建一个 ExceptionMapper 就可以了。

于 2013-01-28T13:11:59.627 回答
0

看看这个页面:http ://www.rexsl.com/rexsl-core/trap.html 。它解释了如何/应该如何捕获 Web 应用程序中的所有运行时异常。建议的解决方案ExceptionMapper只会捕获 JAX-RS 异常,这还不够,尤其是在您使用 DB 和 Hibernate 时。

ExceptionTrap该类的源代码在这里

于 2013-01-28T15:25:00.003 回答