JavaにはHTTP応答コードの完全な列挙がありますか?


267

有効なすべてのHTTP応答コードの記号定数を定義するenum型がいくつかの標準Javaクラスライブラリにあるかどうか疑問に思っています。対応する整数値との間の変換をサポートする必要があります。

javax.ws.rs.core.Response.Statusを使用するJavaコードをデバッグしています。動作しますが、有効なHTTP応答コードの約半分しか定義されていません。

回答:


280

標準のJavaクラスで完全なものはないと思います。HttpURLConnectionのようなかなりの数のコードがありませんHTTP 100/Continue

ApacheのHttpComponentsでの完全なリストがあります、にもかかわらず:
org.apache.http.HttpStatus(置き換えorg.apache.commons.HttpClient.HttpStatus達しアパッチのHttpクライアントからの人生の終わりに


5
ステータスコードは拡張される可能性があり、実際に拡張されるため、「完全なリスト」のようなものはありません。
Julian Reschke

16
@JulianReschkeここで「完全な」とは、「標準で概説されているすべてのコードに準拠している」という意味で解釈する必要があります。
John Feminella、2012年

2
ジョン:「標準」は「すべて」のステータスコードを定義していません。それがレジストリがある理由です。
Julian Reschke

1
iana.org/assignments/http-status-codes/http-status-codes.xmlには、code = 100を含む大きなリストがあります
Garis M Suero

1
@Donal:繰り返しになりますが、良いリストではありません。関連するのは、IANAレジストリです。
Julian Reschke 2013

66

javax.servlet.http.HttpServletResponseサーブレットAPI のインターフェースには、すべての応答コードがint定数名の形式で含まれていますSC_<description>http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.htmlを参照してください


3
HttpServletResponseはRFC1945およびRFC2616標準の一部をサポートしていますが、RFC2518のすべてが欠落しています。完全なリストが必要な場合は、前述のHttpStatusを参照してください。
John Feminella、2009

2
HttpServletResponseにもRFC 2324で
daiscog

サーブレットの外部で実行されるものでHttpServletResponseを使用すると、異なるサーブレットアーティファクトでクラスが重複しているため、ダイヤモンドの依存関係の問題が発生する可能性があります。
Elliotte Rusty Harold

51

さて、HttpURLConnectionクラスには正確な整数値の静的定数があります


6
どうも!これは、外部の依存関係なしで機能します。java.net.HttpURLConnection.HTTP_BAD_REQUEST
コモナード2016

400の範囲で、それは415で遮断例えば-それの標準ライブラリの一部が、残念ながら、それは不完全だとグッド
tschumann

18

Springを使用している場合、3.xリリースはあなたが探しているものを持っています:http : //static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html


3
Springs org.springframework.http.HttpStatus(docs.spring.io/spring/docs/current/javadoc-api/org/…)列挙型を追加します。これは、Javaドキュメントにリンクを提供する唯一の列挙型です。ステータスコードと各列挙型での使用方法の完全なリストをご覧ください。すでにSpringを使用している場合は、これが使用するライブラリになります。
lastmannorth 2017

2
100と418があります。int HttpStatus.XXX.value()を取得するために呼び出す必要があるのは残念です。
WesternGun

7

Nettyを使用している場合は、以下を使用できます。


残念ながら、これは列挙型ではないため、caseステートメントでは使用できません(これは私を悲しくします)
Frederick Roth、

7

誰もがあなたの質問の「列挙型」の部分を無視しているようです。

HTTPステータスコードの正規のソースはありませんが、プロジェクトに追加の依存関係を追加せずに、提供されているものに必要なステータス定数を追加する簡単な方法がありjavax.ws.rs.core.Response.Statusます。

javax.ws.rs.core.Response.Status の実装の1つにすぎません javax.ws.rs.core.Response.StatusTypeインターフェースの。必要なステータスコードの定義を含む独自の実装列挙を作成するだけです。

Javax、Jerseyなどのコアライブラリは、実装ではなくインターフェイスに 書き込まれます(またはそうでなければなりません)。新しいStatus enumは実装されているため、使用する場所はどこでも使用できます。StatusType StatusStatusTypejavax.ws.rs.core.Response.Status定数。

自分のコードもStatusTypeインターフェイスに書き込む必要があることを覚えておいてください。これにより、独自のステータスコードと「標準」のステータスコードの両方を使用できるようになります。

これは、「情報1xx」ステータスコードに対して定義された定数を使用した簡単な実装の要点です。https//gist.github.com/avendasora/a5ed9acf6b1ee709a14a


5

javax.servlet.http.HttpServletResponseクラスを使用する

例:

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

4
クライアント開発の場合、これらのコードを取得するためだけにサーブレットAPI全体を含めるのは面倒です。
Jeffrey Blattman、2013年

1
場合によっては負担になるかもしれませんが、私はこの良い答えを見つけて、サーブレットベースのWebアプリを作成しているので、私にとっては良いことです。
AndreiRînea15年

2
3年後に投稿された重複した回答ですか?削除する必要があります。
zb226 2015年

4

1)理由を知る コードしかない場合にテキスト、以下を使用できます。

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

httpCodeHTTP応答から取得した理由コードはどこにありますか。

見る 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



0

httpステータスコード定数の最適なプロバイダーは、Jettyのorg.eclipse.jetty.http.HttpStatusクラスである可能性があります。

  • mavenにはjavadocパッケージがあり、定数を検索して番号のみを知っている場合に重要です-> api docsページを開いて番号を検索するだけです
  • 定数には、ステータスコード番号自体が含まれます。

私が改善する唯一のこと:コードから始めるときにオートコンプリートルックアップをより便利にするために、ステータスコード番号をテキストの説明の前に置きます。


-1

別のオプションはHttpStatus、Apache commons-httpclientのクラスを使用して、さまざまなHttpステータスを定数として提供することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.