
[英]ExceptionMapper for WebApplicationExceptions thrown with entity?
[英]Custom WebApplicationExceptions in jaxrs caught by ExceptionMapper show up in server log
我使用以下Exceptionmapper将我的jaxrs rest api中的WebApplicationExceptions映射到响应。
@Provider
public class ErrorHandler implements ExceptionMapper<WebApplicationException> {
@Override
public Response toResponse(WebApplicationException e) {
int status = e.getResponse().getStatus();
JsonObject errorResponse = Json.createObjectBuilder()
.add("status", status)
.add("message", e.getMessage())
.build();
return Response.status(status)
.entity(errorResponse)
.type(MediaType.APPLICATION_JSON)
.build();
}
}
这可以正常工作,并且确实可以完成它的工作,但是当我抛出自定义错误时,例如throw new NotFoundException("custom message");
stacktrace显示在我的服务器日志中。 谁能解释一下? 还是有人知道解决方案?
TL; DR;
由于某种原因,当我从jax-rs代码中抛出WebApplicationExceptions时,我的ExceptionMapper会处理该错误,但仍会抛出该错误,因此它会显示在服务器日志中。
有什么办法吗?
我已经找到了这个问题的根源并设法解决了。
当选择异常映射提供程序来映射异常时,实现必须使用其泛型类型为异常的最接近超类的提供程序。
在我的ExceptionMapper
我使用了WebApplicationException
,因此将映射每个错误。 问题在于WebApplicationException
不是(例如) NotFoundException
的最近的超类。 它们之间有一个ClientErrorException
超类。 当我将映射器更改为该类时,问题解决了。
由于我只想将客户端错误映射到Json响应,因此该解决方案对我来说效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.