【发布时间】:2014-05-27 17:04:49
【问题描述】:
我有点困...想要我的蛋糕,也吃掉它。
我想记录我的应用程序抛出的所有个异常。因此,如果有人点击了错误的 URL,我想将堆栈跟踪记录到 SLF4J。
所以你可能在想,'嘿,这很简单,只需实现一个异常映射器并记录异常。“所以我做到了:
public class RestExceptionMapper implements ExceptionMapper<java.lang.Exception> {
private static final Logger log = LoggerFactory.getLogger(RestExceptionMapper.class);
/**
* {@inheritDoc}
*/
@Override
public Response toResponse(Exception exception) {
log.error("toResponse() caught exception", exception);
return null;
}
}
如果您这样做,当有人输入错误的 URL 时,不会出现 404 错误,而是会收到 500 错误。有人会猜测返回 null 会将异常传播到链处理程序中,但 Jersey 不会这样做。它实际上提供的信息很少,为什么它会选择一个处理程序而不是另一个处理程序......
有没有人遇到过这个问题,你是怎么解决的?
【问题讨论】:
-
我会使用 CDI 拦截器
-
那么,您的问题是什么:是 404 错误吗?还是如何选择异常映射器?还是别的什么?
-
不,问题是如果您使用上述代码,则不会调用 Jersey 提供的“stock”拦截器。 404 错误变成 500 错误。
标签: java rest jakarta-ee jersey jax-rs