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



我是JAX-RS的新手,并且仍在学习,所以我的问题可能有点幼稚,所以请忍受它:)

我一直在经历各种问题,以解决HTTP响应的"错误代码"的问题。。我发现,只要一个人不想读书,他就可以在响应中返回4xx状态代码。

我也通过了此链接RFS 2616也是W3

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

例如,如果在POST请求中,请求通过用户ID获取用户信息并返回错误,如果UserID无效/不存在。在这种情况下,HTTP状态422听起来很闲置。但是,如果需要详细的错误描述,则可以自定义错误,例如40xx,其中XX值是XX值,而不是将HTTP错误返回给客户端。

同样可以根据客户端定义40xx并返回?(请求中具有正确的语法)

4001-用户ID无效

4002-发帖ID无效

等。

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

如果您正在开发不会公开的内部系统,则可以使用自定义代码。另一方面

在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;
    }
}

,然后将状态设置为响应。ResponseBuilder:

Response.status(new CustomBadRequestType()).build();

一个人可以使用更多自定义代码扩展现有界面(并将其保留)如下:

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客户端错误。)

最新更新