HTTP状态代码Json

时间:2018-10-03 14:49:59

标签: java json rest api

直到现在,我一直在做我的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? 最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

由于请求的语法可能无效,因此您可能无法获得准确的错误响应。由于400请求不正确,因此可能是语法,凭据,甚至可能是与api本身的连接。您未收到错误消息的原因似乎使该api无法将其发送回您的计算机。希望能有所帮助!