RESTEasy客户端异常处理

时间:2015-06-03 21:10:49

标签: java jax-rs resteasy

我有一个使用RESTEasy的简单客户端,如下所示:

public class Test {
    public static void main(String[] args) {
        ResteasyClient client = new ResteasyClientBuilder().build();
        ResteasyWebTarget target = client.target("http://localhost");
        client.register(new MyMapper());
        MyProxy proxy = target.proxy(MyProxy.class);
        String r = proxy.getTest();
    }
}

public interface MyProxy {
   @GET
   @Path("test")
   String getTest();
}

@Provider
public class MyMapper implements ClientExceptionMapper<BadRequestException>{

    @Override
    public RuntimeException toException(BadRequestException arg0) {
        // TODO Auto-generated method stub
        System.out.println("mapped a bad request exception");
        return null;
    }

}

服务器配置为在400 - Bad Request上返回http://localhost/test以及有用的消息。 BadRequestException正在抛出ClientProxy。除了包装try/catch之外,如何使getTest()捕获异常并将响应的有用消息作为字符串返回。我尝试了各种ClientExceptionMapper实现,但似乎可以做到正确。上面的代码不会调用toException。我在这里缺少什么?

我目前的解决方法是使用ClientResponseFilter,然后执行setStatus(200)并将原始状态填入响应实体。这样我就避免了异常抛出。

1 个答案:

答案 0 :(得分:0)

Resteasy中的ClientExceptionMapper已弃用(请参见java docs

  

resteasy-client模块中的JAX-RS 2.0客户端代理框架可以   不使用   org.jboss.resteasy.client.exception.mapper.ClientExceptionMapper。

尝试使用这样的ExceptionMapper:

import javax.ws.rs.ClientErrorException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class MyMapper implements ExceptionMapper<ClientErrorException> {

    @Override
    public Response toResponse(ClientErrorException e) {
        return Response.fromResponse(e.getResponse()).entity(e.getMessage()).build();
    }
}

此致

相关问题