gpt4 book ai didi

java - JAX RS客户端: Catch exception message while making a REST call

转载 作者:行者123 更新时间:2023-11-30 07:50:08 24 4
gpt4 key购买 nike

我正在使用 ResteasyClient 为我的另一个服务 A 创建 REST 客户端。比如说,服务 A 抛出异常 CustomException 并显示一条消息:收到无效请求。这是我使用客户端的方式:

public Response callServiceA(final String query) {
ResteasyClient client = new ResteasyClientBuilder().build();
String link = "abc.com/serviceA";
ResteasyWebTarget target = client.target(link).path("call");
Form form = new Form();
form.param("query", query);
Response response;
try {
String data =
target.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(form,
MediaType.APPLICATION_FORM_URLENCODED_TYPE),
String.class);
response = Response.ok().entity(data).build();
} catch (Exception e) {
String message = e.getMessage();
e.printStackTrace();
response = Response.serverError().entity(e.getMessage()).build();
} finally{
client.close();
}
return response;
}

但是,当我打印堆栈跟踪时,我无法找到自定义错误消息。我只能看到该消息为 HTTP 400 错误请求。您能否建议我如何访问错误消息?

注意:当我使用restClient调用serviceA时,我能够收到错误消息。因此,我认为服务没有问题。

最佳答案

不要将响应直接反序列化为字符串

String data = ...
.post(Entity.entity(form,
MediaType.APPLICATION_FORM_URLENCODED_TYPE),
String.class);

当您执行此操作(并且存在问题)时,您只会收到客户端异常,该异常不包含有关响应的信息。相反,只需获取带有重载的 postResponse方法

Response response = ...
.post(Entity.entity(form,
MediaType.APPLICATION_FORM_URLENCODED_TYPE));

然后您可以从Response获取详细信息,例如状态等。您可以使用response.readEntity(String.class)获取正文。这样你就不需要处理任何异常。只需根据状态处理条件即可。

请注意,上面的 Response 是入站 Response,它与当前代码中的出站 Response 不同。因此,请确保不要尝试发送入站响应

另请参阅this answer以及一些设计想法的评论。

关于java - JAX RS客户端: Catch exception message while making a REST call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33407322/

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