jax-rs - 为什么 JAX-RS 不支持开箱即用的 423 错误代码?
问题描述
我使用的是 JAX-RS 2.1,发现Response
类枚举缺少423
错误代码。
谁能向我解释为什么?
我在互联网上搜索但没有找到任何相关的线程。
解决方案
从Response.Status
文档中:
HTTP 定义的常用状态码,完整列表参见 HTTP/1.1 文档。应用程序可以通过创建
Response.StatusType
.
状态代码在RFC 4918423
中定义为WebDAV的一部分,它是HTTP 协议的扩展。
一旦在 IANA423
中注册,它可以被视为标准状态码,但在当前定义 HTTP/1.1 协议的任何文档中都没有定义:
不过有很多方法可以返回423
。最简单的是:
return Response.status(423).build();
或者,您可以按照文档Response.StatusType
中的建议实施Response.Status
:
public static class LockedStatusType implements Response.StatusType {
@Override
public int getStatusCode() {
return 423;
}
@Override
public String getReasonPhrase() {
return "Locked";
}
@Override
public Response.Status.Family getFamily() {
return Response.Status.Family.CLIENT_ERROR;
}
}
然后返回它:
return Response.status(new LockedStatusType()).build();