gpt4 book ai didi

java - ExceptionMapper 捕获的 jax rs 中的自定义 WebApplicationException 显示在服务器日志中

转载 作者:行者123 更新时间:2023-12-02 11:28:33 25 4
gpt4 key购买 nike

我使用以下 Exceptionmapper 将 jaxrs Rest api 中的 WebApplicationException 映射到响应。

@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();
}
}

这工作正常,并且它确实做了它应该做的事情,但是当我抛出自定义错误时,例如 抛出 new NotFoundException("custom message"); 堆栈跟踪显示在我的服务器日志中。谁能解释一下吗?或者有人知道解决办法吗?

TL;DR;

出于某种原因,当我从 jax-rs 代码中抛出 WebApplicationExceptions 时,我的 ExceptionMapper 会处理该错误,但仍会抛出该错误,因此它会显示在服务器日志中。

有什么解决办法吗?

最佳答案

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

来自JAX-RS spec

When choosing an exception mapping provider to map an exception, an implementation MUST use the provider whose generic type is the nearest superclass of the exception.

在我的ExceptionMapper中,我使用了WebApplicationException,因此每个错误都会被映射。问题是 WebApplicationException 不是(例如)NotFoundException 最接近的父类(super class)。中间有一个 ClientErrorException 父类(super class)。当我将映射器更改为该类时,问题就解决了。

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

关于java - ExceptionMapper 捕获的 jax rs 中的自定义 WebApplicationException 显示在服务器日志中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49453868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com