繁体   English   中英

服务器日志中显示ExceptionMapper捕获的jaxrs中的自定义WebApplicationExceptions

[英]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会处理该错误,但仍会抛出该错误,因此它会显示在服务器日志中。

有什么办法吗?

我已经找到了这个问题的根源并设法解决了。

JAX-RS规范

当选择异常映射提供程序来映射异常时,实现必须使用其泛型类型为异常的最接近超类的提供程序。

在我的ExceptionMapper我使用了WebApplicationException ,因此将映射每个错误。 问题在于WebApplicationException不是(例如) NotFoundException的最近的超类。 它们之间有一个ClientErrorException超类。 当我将映射器更改为该类时,问题解决了。

由于我只想将客户端错误映射到Json响应,因此该解决方案对我来说效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM