我有一个REST服务,如果授权不好,我会返回401和一些错误消息。
如果我使用postman或其他rest客户端,响应状态为401和payload:
{
"data": null,
"errors": [
{
"code": "REQUEST_NOT_AUTHORIZED",
"message": "Request not authorized"
}
]
}
如果我使用RestEasy客户端,则客户端会自动抛出此异常:
EJB Invocation failed on component GatewayApi for method public com.example.AuthToken com.example.GatewayApi.authenticate(....): javax.ejb.EJBException: javax.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized
Caused by: javax.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized
如果我尝试/捕获异常,那么我的有效负载就会消失。
我正在实施的方式是(例如):
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(UriBuilder.fromPath(SERVICE_URL));
proxy = target.proxy(GatewayApiInterface.class);
稍后编辑 - 验证方法
public AuthToken authenticate(String id, String name, String password) {
try {
ResponseEnvelope<AuthToken> authTokenResponseEnvelope = proxy.authenticate(id, name, password);
return authTokenResponseEnvelope.getData();
} catch (javax.ws.rs.NotAuthorizedException wae) {
return null;
}
}
有没有办法在每次状态时停止RestEasy抛出异常!= 200? 或者某种方式从Rest服务器获取我的原始有效负载?
答案 0 :(得分:0)
修正了它:)。这是我使用的一个小测试示例。在我没有使用Response(我的坏)之前
服务器端
@GET
@Path("/test")
public Response test() {
return Response.status(Response.Status.UNAUTHORIZED)
.entity("TEST")
.build();
}
客户端代理类
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
Response test();
<强>客户端强>
Response response = proxy.test();
String test = response.readEntity(String.class);
System.out.println(test);
System.out.println(response.getStatus());
response.close();