在JAX-RS的响应中将自定义错误代码返回给客户端

Har*_*han 3 java rest jax-rs http-status-codes

我是JAX-RS的新手并且还在学习它,所以我的问题可能有点幼稚,所以请耐心等待:)

我一直在经历各种SO问题"http响应的错误代码".我发现只要一个人不想迂腐,他就可以在回复中返回4xx状态代码.

我也经历过这个链接RFS 2616也是W3

我想知道是否有任何一般做法可以返回标准HTTP响应状态代码以外的自定义错误代码.

例如,如果在post请求中通过userid获取用户信息,则返回错误,如果userid无效/不存在.在这种情况下,HTTP状态422听起来空闲.但是如果需要详细的错误描述,可以自定义错误,如40xx,其中xx是除了http错误之外的值,返回给客户端.

同样可以定义和返回40xx以响应客户端吗?(在请求中具有正确的语法)

4001 - userid无效

4002 - 帖子ID无效

等等..

或者我应该返回4xx状态代码并在响应正文中添加自己的代码以获取更多错误详细信息?

Mic*_*dos 12

如果您正在开发不会公开的内部系统,那么您可以使用自定义代码.另一方面,如果您想要公开一些API,最好坚持使用标准代码并在状态原因短语或实体主体中提供更多信息.

在JAX-RS中,您可以创建自己的状态(或覆盖标准状态的原因短语),如:

public static class CustomBadRequestType implements Response.StatusType {

    @Override
    public int getStatusCode() {
        return 400;
    }

    @Override
    public String getReasonPhrase() {
        return "My Reason";
    }

    @Override
    public Response.Status.Family getFamily() {
        return Response.Status.Family.CLIENT_ERROR;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将状态设置为Response.ResponseBuilder:

Response.status(new CustomBadRequestType()).build();
Run Code Online (Sandbox Code Playgroud)