我想知道在某些标准Java类库中是否有一个枚举类型,该枚举类型为所有有效的HTTP响应代码定义了符号常量。它应支持与相应整数值之间的转换。
我正在调试一些使用javax.ws.rs.core.Response.Status的Java代码。它可以工作,但是仅定义了有效HTTP响应代码的一半。
我想知道在某些标准Java类库中是否有一个枚举类型,该枚举类型为所有有效的HTTP响应代码定义了符号常量。它应支持与相应整数值之间的转换。
我正在调试一些使用javax.ws.rs.core.Response.Status的Java代码。它可以工作,但是仅定义了有效HTTP响应代码的一半。
Answers:
我认为标准Java类中没有一个是完整的。HttpURLConnection
缺少很多代码,例如HTTP 100/Continue
。
不过,Apache HttpComponents中有完整的列表:(从使用寿命已尽的Apache Http Client
org.apache.http.HttpStatus
代替)org.apache.commons.HttpClient.HttpStatus
javax.servlet.http.HttpServletResponse
Servlet API 的接口以int
常量名称的形式包含所有响应代码SC_<description>
。参见http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html
好吧,HttpURLConnection类中有确切整数值的静态常量。
java.net.HttpURLConnection.HTTP_BAD_REQUEST
如果您使用的是Spring,那么3.x发行版可以满足您的需求:http : //static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
HttpStatus.XXX.value()
以获得整数。
如果您使用的是Netty,则可以使用:
每个人似乎都忽略了问题的“枚举类型”部分。
虽然没有HTTP状态代码的规范来源,但是有一种简单的方法可以将所需的任何缺少的Status常量添加到所提供的状态常量中,javax.ws.rs.core.Response.Status
而无需在项目中添加任何其他依赖项。
javax.ws.rs.core.Response.Status
只是该javax.ws.rs.core.Response.StatusType
接口的一种实现。您只需要创建自己的实现枚举以及所需状态代码的定义。
诸如Javax,Jersey等之类的核心库是写入接口 StatusType
而不是实现的 Status
(或者确实应该写入)。由于新的Status枚举实现了,StatusType
因此可以在任何使用javax.ws.rs.core.Response.Status
常量的地方使用它。
只要记住您自己的代码也应该写入StatusType
接口即可。这将使您能够同时使用自己的状态代码和“标准”代码。
这是一个具有简单实现方式的要点,该实现带有为“信息1xx”状态码定义的常量:https : //gist.github.com/avendasora/a5ed9acf6b1ee709a14a
使用javax.servlet.http.HttpServletResponse类
例:
javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500
1)要获取原因文本(如果只有代码),可以使用:
org.apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null)
httpCode
您从HTTP响应中获得的原因代码在哪里?
2)如果只有文字,则要获取原因码,可以使用BasicHttpResponse
。
详情请参阅这里:https : //hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html
还要检查Restlet Status类:
http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html