Java JAX-RS客户机:在进行REST调用时捕获异常消息

Java JAX-RS客户机:在进行REST调用时捕获异常消息,java,rest,exception-handling,jax-rs,Java,Rest,Exception Handling,Jax Rs,我正在使用ResteasyClient将REST客户端创建到我的另一个服务a。例如,服务a抛出异常CustomException,并显示一条消息:获得无效请求。 以下是我如何使用客户端: public Response callServiceA(final String query) { ResteasyClient client = new ResteasyClientBuilder().build(); String link = "abc.com/serviceA";

我正在使用ResteasyClient将REST客户端创建到我的另一个服务a。例如,服务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;
}
但是,当我打印stacktrace时,我找不到自定义错误消息。我可以看到消息为HTTP 400错误请求。 你能告诉我如何访问错误消息吗


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

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

String data = ...
          .post(Entity.entity(form,
                MediaType.APPLICATION_FORM_URLENCODED_TYPE),
                String.class);
当您执行此操作时(存在问题),您只会得到一个客户端异常,它不包含有关响应的信息。相反,只需使用重载方法获取
响应

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

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


另请参阅及其评论,了解一些设计想法。

非常感谢您提供的解决方案。我可以通过对传入响应执行.readEntity方法来访问错误消息。
Response response = ...
          .post(Entity.entity(form,
                MediaType.APPLICATION_FORM_URLENCODED_TYPE));