直到现在,我一直在做我的API:
@GET
@GZIP
@Path("/login")
@Produces(MediaType.TEXT_HTML)
public Response login(@QueryParam("email") String email, @QueryParam("password") String password){
UserDao userDao = new UserDao();
String token = userDao.getLogin(email, password);
if(token != null)
return Response.status(200).entity(token).build();
return Response.status(400).build();
}
它工作得非常好,因为在客户端中我只调用http服务,它返回令牌是字符串响应还是json响应。
但是我对其他API进行了一些研究,发现它们的格式比字符串/ json响应要复杂得多。
所以我试图构建一些更严肃的结构,我为响应创建了一个对象,如下所示:
public class JsonResponse {
private String success;
private String error;
private Object data;
public JsonResponse(){
}
public JsonResponse(String success, String error, Object data) {
this.success = success;
this.error = error;
this.data = data;
}
//GETTERS/SETTERS...
}
因此我将REST部分从上面的部分更改为:
@GET
@GZIP
@Path("/login")
@Consumes(MediaType.TEXT_HTML)
@Produces(MediaType.APPLICATION_JSON)
public Response login(@QueryParam("email") String email, @QueryParam("password") String password){
UserDao userDao = new UserDao();
JsonResponse jsonResponse = userDao.login(email, password);
if(jsonResponse.getSuccess() != null)
return Response.status(200).entity(jsonResponse).build();
return Response.status(400).entity(jsonResponse).build();
}
这样,我可以在客户端中执行的操作是获取响应,而不仅仅是获得像这样的令牌字符串:
{
success: "success",
error: null,
data: "$2a$10$nT0vSwBCDiRl1Xvfrqrh1un8Iu/w3OInjp.JQDKux1aA6YZoyfEt2"
}
或
{
success: null,
error: "An error occured because of '...specific problem from api...'",
data: "$2a$10$nT0vSwBCDiRl1Xvfrqrh1un8Iu/w3OInjp.JQDKux1aA6YZoyfEt2"
}
所以我的问题如下: 当api发送STATUS_CODE 200时,我确实可以使用该JSON
但是当它返回STATUS_CODE 400时,由于未发送json,我无法从json中获取错误消息
如果要这样做,是否需要始终使用STATUS_CODE 200? 最佳做法是什么?
答案 0 :(得分:0)
由于请求的语法可能无效,因此您可能无法获得准确的错误响应。由于400请求不正确,因此可能是语法,凭据,甚至可能是与api本身的连接。您未收到错误消息的原因似乎使该api无法将其发送回您的计算机。希望能有所帮助!