Java是否有HTTP响应代码的完整枚举?

Java是否有HTTP响应代码的完整枚举?,java,http,Java,Http,我想知道在一些标准Java类库中是否有一个枚举类型,它为所有有效的HTTP响应代码定义符号常量。它应该支持与相应整数值之间的转换 我正在调试一些使用javax.ws.rs.core.Response.Status的Java代码。它可以工作,但它只定义了大约一半的有效HTTP响应代码。好吧,类中有精确整数值的静态常量我认为在标准Java类中没有一个是完整的缺少很多代码,如HTTP 100/Continue 不过,Apache HttpComponents中有一个完整的列表: (由Apache Ht

我想知道在一些标准Java类库中是否有一个枚举类型,它为所有有效的HTTP响应代码定义符号常量。它应该支持与相应整数值之间的转换


我正在调试一些使用
javax.ws.rs.core.Response.Status
的Java代码。它可以工作,但它只定义了大约一半的有效HTTP响应代码。

好吧,类中有精确整数值的静态常量

我认为在标准Java类中没有一个是完整的缺少很多代码,如HTTP 100/Continue

不过,Apache HttpComponents中有一个完整的列表:

(由Apache Http客户端替换,该客户端已达到)

servlet API中的接口
javax.servlet.Http.HttpServletResponse
int
常量名称
SC
的形式包含所有响应代码。请参见

另请查看Restlet状态类:


如果您使用的是Spring,那么3.x版本就满足了您的需求:

使用javax.servlet.http.HttpServletResponse类

例如:

javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500

http状态代码常量的最佳提供者可能是Jetty的org.eclipse.Jetty.http.HttpStatus类,因为:

  • maven中有一个javadoc包,如果您搜索常量并且只知道数字->只需打开api文档页面并搜索数字,这一点很重要
  • 这些常量包含状态代码本身

我唯一需要改进的是:将状态代码编号放在文本描述前面,以便在开始代码时更方便地进行自动完成查找。

另一个选项是使用Apache commons httpclient中的
HttpStatus
类,该类将各种Http状态作为常量提供给您。

如果您需要如果正在使用Netty,您可以使用:

org.apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null)
  • io.netty.handler.codec.http

每个人似乎都忽略了问题中的“枚举类型”部分

虽然没有HTTP状态代码的规范源代码,但有一种简单的方法可以将任何缺少的状态常量添加到
javax.ws.rs.core.Response.Status提供的状态常量中,而无需向项目添加任何其他依赖项

javax.ws.rs.core.Response.Status
只是
javax.ws.rs.core.Response.StatusType
接口的一个实现。您只需创建自己的实现枚举,其中包含所需状态代码的定义

Javax、Jersey等核心库被写入接口
StatusType
,而不是实现
Status
(或者它们肯定应该是)。由于新的状态枚举实现了
StatusType
,因此可以在任何地方使用
javax.ws.rs.core.Response.Status
常量

请记住,您自己的代码也应该写入
StatusType
接口。这将使您能够同时使用自己的状态代码和“标准”状态代码

下面是一个简单实现的要点,其中为“信息性1xx”状态代码定义了常量:

1)要获取原因文本,如果您只有代码,可以使用:

org.apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null)
其中
httpCode
将是您从HTTP响应中获得的原因码

有关详细信息,请参阅

2) 若要获取原因code(如果您只有文本),可以使用
BasicHttpResponse


有关详细信息,请参见此处:

这是一个枚举,其中包含状态代码及其描述(在编写本文时)与对应的

请注意,注册表可能会更新,并且有时会使用非官方的状态代码

公共枚举HttpStatusCode{
//1xx:信息性
继续(100,“继续”),
交换协议(101,“交换协议”),
处理(102,“处理”),
早期提示(103,“早期提示”),
//2xx:成功
OK(200,“OK”),
创建(201,“创建”),
接受(202,“接受”),
非权威信息(203,“非权威信息”),
无内容(204,“无内容”),
重置内容(205,“重置内容”),
部分内容(206,“部分内容”),
多重身份(207,“多重身份”),
已报告(208,“已报告”),
IM_USED(226,“IM USED”),
//3xx:重定向
多项选择(300,“多项选择”),
永久移动(301,“永久移动”),
发现(302,“发现”),
见其他(303,“见其他”),
未修改(304,“未修改”),
使用代理(305,“使用代理”),
临时重定向(307,“临时重定向”),
永久重定向(308,“永久重定向”),
//4xx:客户端错误
错误请求(400,“错误请求”),
未经授权(401,“未经授权”),
需要付款(402,“需要付款”),
禁止(403,“禁止”),
未找到(404,“未找到”),
不允许使用方法(405,“不允许使用方法”),
不可接受(406,“不可接受”),
需要代理身份验证(407,“需要代理身份验证”),
请求超时(408,“请求超时”),
冲突(409,“冲突”),
消失(410,“消失”),
所需长度(411,“所需长度”),
前提条件_失败(412,“前提条件失败”),
请求太长(413,“有效负载太大”),
请求URI过长(414,“URI过长”),
不支持的介质类型(415,“不支持的介质类型”),
请求的范围不可满足(416,“范围不可满足”),
预期失败(417,“预期失败”),
指示错误的请求(421,“指示错误的请求”),
不可加工实体(422,“不可加工实体”),
锁定(423,“锁定”),
失败的依赖项(424,“失败的依赖项”),
太早(425,“太早”),
需要升级(426,“需要升级”),
需要前置条件(428,“前置条件要求