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

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

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

我不认为在标准的Java类中有完整的东西, HttpURLConnection丢失了很多代码,例如HTTP 100/Continue 。 在Apache Commons中有一个完整的列表: org.apache.commons.HttpClient.HttpStatus

更新: Apache Commons HttpClient是生命的终结 。 有关状态码的列表,请在Apache HttpComponents中使用org.apache.http.HttpStatus

来自servlet API的接口javax.servlet.http.HttpServletResponse具有所有以int常量名SC_<description>forms的响应代码。 请参阅http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html

那么,在HttpURLConnection类中有确切的整数值的静态常量

如果你使用的是Spring,3.x版本有你想要的: http : //static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html

使用javax.servlet.http.HttpServletResponse类

例:

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

如果你使用的是Netty ,你可以使用:

  • io.netty.handler.codec.http。 HttpResponseStatus

每个人似乎都忽略了你的问题的“枚举types”部分。

虽然HTTP状态码没有规范的来源,但是有一种简单的方法可以任何缺less的状态常量添加javax.ws.rs.core.Response.Status提供的那些状态常量中,而无需为项目添加任何附加依赖项。

javax.ws.rs.core.Response.Status只是javax.ws.rs.core.Response.StatusType接口的一个实现。 你只需要创build你自己的实现枚举的定义你想要的状态代码。

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

只要记住你自己的代码也应该写入StatusType接口。 这将使您能够使用您自己的“状态码”与“标准”码一起使用。

这里有一个简单的实现与定义为“信息1xx”状态代码常量的要点: https : //gist.github.com/avendasora/a5ed9acf6b1ee709a14a

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

 org.apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null) 

httpCode将成为您从HTTP响应中获得的原因代码。

有关详细信息,请参见https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html

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

详情请看这里: https : //hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html

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

  • 在maven中有一个javadoc包,这对于search常量并且只知道数字很重要 – >打开api文档页面并search数字
  • 常量包含状态码本身。

只有我会改进:将状态代码编号放在文本描述的前面,以便在开始编码时使自动完成查找更加顺畅。

另一种select是使用Apache commons-httpclient中的HttpStatus类,它提供各种Http状态作为常量。