我有一个使用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)
并将原始状态填入响应实体。这样我就避免了异常抛出。
答案 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();
}
}
此致