我的技术堆栈是Tomcat(servlet 3.0),Jersey用于JAX-RS,Spring和Hibernate。当Hibernate中的某些数据转换错误出现意外问题时,我不希望客户端看到我的堆栈跟踪是否存在Tomcat尝试默认打印的异常。但是,我想记录这些异常,以便找出错误并解决问题。
我的第一次尝试是使用来自JAX-RS的ExceptionMapper,并天真地认为可以解决我的问题。但后来我发现泽西岛抛出了自己的例外,例如未映射的网址是com.sun.jersey.api.NotFoundExceptions。这会导致记录404异常,这是我不想要的。更糟糕的是,客户端不再获得404,而是获得状态代码500.
我可以为jersey抛出的异常创建异常映射器,但我可能会遗漏一些东西。这样的事情有最好的做法吗?
答案 0 :(得分:7)
Jersey直接抛出的所有异常都是WebApplicationException的子类,所以如果你想要捕获它们,只需为该类创建一个ExceptionMapper,你就会很好。
答案 1 :(得分:0)
查看此页面:http://www.rexsl.com/rexsl-core/trap.html。它解释了如何/应该捕获Web应用程序中的所有运行时异常。使用ExceptionMapper
的建议解决方案只会捕获JAX-RS异常,这是不够的,特别是如果您使用的是DB和Hibernate。
ExceptionTrap
类的源代码为here。