Java 在JAX-RS响应中向客户机返回自定义错误代码

Java 在JAX-RS响应中向客户机返回自定义错误代码,java,rest,jax-rs,http-status-codes,Java,Rest,Jax Rs,Http Status Codes,我是JAX-RS新手,还在学习,所以我的问题可能有点幼稚,所以请耐心点:) 我一直在为“http响应的错误代码”讨论各种SO问题。我发现,只要一个人不想学究气,他就可以在回复中返回4xx状态码 我也通过了这个链接 我想知道除了标准的HTTP响应状态代码之外,是否有返回自定义错误代码的一般做法 e、 g如果在post中请求通过userid获取用户信息,并且如果userid无效/不存在,则返回错误。在这种情况下,HTTP状态422听起来是空闲的。但若需要详细的错误描述,可以将自定义错误(如40xx,

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

我一直在为“http响应的错误代码”讨论各种SO问题。我发现,只要一个人不想学究气,他就可以在回复中返回4xx状态码

我也通过了这个链接

我想知道除了标准的HTTP响应状态代码之外,是否有返回自定义错误代码的一般做法

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

类似地,可以定义40xx并返回给客户端吗?(请求中的语法正确)

4001-用户标识无效

4002-帖子id无效

等等


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

如果您正在开发不会公开的内部系统,则可以使用自定义代码。另一方面,如果您想向公众公开一些API,最好遵守标准代码,并在状态原因短语或实体正文中提供更多信息

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

然后将状态设置为:


可以使用更多自定义代码(并保留现有代码)扩展现有接口,如下所示:

public enum CustomResponseStatus implements Response.StatusType {
    OK(Response.Status.OK.getStatusCode(), "OK"),
    CREATED(Response.Status.CREATED.getStatusCode(), "Created"),
    INVALID_INPUTS(419, "Invalid inputs");
}
您可以将CustomResponseStatus代码设置为响应对象的一部分,如下所示

ResponseBuilder.status(CustomResponseStatus.INVALID_INPUTS).build();

如果自定义状态介于整数102和599(含)之间,还可以使用
int
值设置状态:

ResponseBuilder.status(451).build();

事实上,即使使用自定义状态代码,也强烈建议使用标准分组(1xx、2xx、3xx、4xx、5xx)。(提供的示例可能是4xx客户端错误。)

我同意你的最后一句话。面对同样的问题,我想添加自定义错误代码,但不确定这是否是一种普遍做法
ResponseBuilder.status(CustomResponseStatus.INVALID_INPUTS).build();
ResponseBuilder.status(451).build();