Java有HTTP响应码的完整枚举吗?| Java Debug 笔记

1,579 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

问题:Java有HTTP响应码的完整枚举吗?

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

我正在使用javax.ws.rs.core.Response.Status调试一些Java代码。它是行得通的,但它只定义了大约一半的合法HTTP响应代码。

回答一

我不认为标准的Java类中有一个是完整的响应码;HttpURLConnection缺少一些响应码,比如HTTP 100/Continue。

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

org.apache.http.HttpStatus(替换Apache HttpClient中的已经过时的org.apache.commons.HttpClient.HttpStatus)

回答二

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

虽然没有HTTP状态码的完整代码,但有一种简单的方法可以将你需要的任何缺少的响应码添加到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接口。这将使您能够在使用“标准”代码的同时也使用您自己的响应码。

下面是一个简单的实现,其中为“Informational 1xx”状态码定义了常量:gist.github.com/avendasora/…

文章翻译自Stack Overflow:stackoverflow.com/questions/7…