gpt4 book ai didi

java - 如何使用 JAX-RS 捕获 WebApplicationException

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:36 27 4
gpt4 key购买 nike

我试图用我的javax.ws.rs.ext.ExceptionMapper类捕获WebApplicationException,但我得到了一个奇怪的行为。

这是我简单的休息方法:

@GET
@Path("/saySomething")
public List<String> saySomething() {
String response = EchoRestClient.ping();
List<String> list = new ArrayList<>();
list.add(response);
list.add("okay");
return list;
}

(第1)这是调用另一个rest api的客户端类:

public class EchoRestClient {
private static Client client = ClientBuilder.newClient();

public static String ping() {
String serviceUrl = PropertyReader.getProperty(ServiceUrl.ECHO_SERVICE);

Response response = client
.target(serviceUrl)
.path("saySomething")
.request(ExtendedMediaType.APPLICATION_UTF8)
.get();

if (response.getStatus() == Response.Status.OK.getStatusCode()) {
return response.getEntity(String.class);
}

throw new WebApplicationException(response);
}
}

还有我的自定义异常处理程序,它不会捕获上面抛出的异常:

@Provider
public class WebservletExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {

System.out.println("caught exception");
Response response;

if (exception instanceof WebApplicationException) {
response = ((WebApplicationException) exception).getResponse();
} else {
response = Response....build();
}

return response;
}
}

(第二)但是如果我这样做,异常就会被捕获(EchoRestClient.java):

public static String ping() {
// same code then before

WebApplicationException e = new WebApplicationException(response);
throw new RuntimeException("xxxxxx", e);
}

上面的代码工作正常,当我从网络浏览器调用 saySomething 休息方法时,我得到了正确的响应。

但是,如果我取消部署 EchoService 其余部分(包含调用的 ping 其余部分方法),则在第一种情况下不会捕获 HTTP 404。我需要抛出 RuntimeException,因为未捕获 WebApplicationException(第二种情况)。

根据文档,异常层次结构是 WebApplicationException 扩展 RuntimeException。

这里出了什么问题?

--编辑--

如果我抛出此异常,那么它会被捕获:抛出新的 WebApplicationException(response.getStatus())

但是这个不起作用:抛出新的WebApplicationException(response)

响应对象有问题吗?

最佳答案

这是由 Jersey 的一个问题引起的。如果您的代码抛出包含 Response 对象的 WebApplicationException,则不会调用 ExceptionMappers。

另请参阅:

关于java - 如何使用 JAX-RS 捕获 WebApplicationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46339265/

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