我想知道在某些标准Java类库中是否存在枚举类型,为所有有效的HTTP响应代码定义符号常量。它应该支持与对应的整数值之间的转换。
我正在调试一些使用javax.ws.rs.core.Response.Status的Java代码。它可以工作,但它只定义了大约一半的有效HTTP响应代码。
我想知道在某些标准Java类库中是否存在枚举类型,为所有有效的HTTP响应代码定义符号常量。它应该支持与对应的整数值之间的转换。
我正在调试一些使用javax.ws.rs.core.Response.Status的Java代码。它可以工作,但它只定义了大约一半的有效HTTP响应代码。
当前回答
使用javax.servlet.http.HttpServletResponse类
例子:
javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500
其他回答
在HttpURLConnection类中有精确整数值的静态常量
每个人似乎都忽略了你问题中的“枚举类型”部分。
虽然HTTP状态码没有规范的源代码,但有一种简单的方法可以将任何缺少的状态常量添加到javax.ws.rs.core.Response.Status提供的状态常量中,而无需向项目添加任何额外的依赖项。
status只是javax.ws.rs.core.Response.StatusType接口的一个实现。您只需要创建自己的实现枚举,其中包含所需的Status Codes的定义。
核心库如Javax、Jersey等被写入接口的StatusType,而不是实现的Status(或者它们当然应该是)。因为你的新状态枚举实现了statusstype,它可以在任何你使用javax.ws.rs.core.Response.Status常量的地方使用。
只需记住,您自己的代码也应该写入StatusType接口。这将使您能够使用您自己的状态代码以及“标准”状态代码。
以下是一个简单实现的要点,其中包含为“Informational 1xx”状态代码定义的常量:https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a
我认为在标准Java类中没有一个是完整的;HttpURLConnection缺少相当多的代码,如HTTP 100/Continue。
在Apache HttpComponents中有一个完整的列表: org.apache.http.HttpStatus(替换了Apache HttpClient中的org.apache.commons.HttpClient.HttpStatus,该状态已达到生命周期结束)
还可以查看Restlet Status类:
http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html
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