2009-04-08 11 views
188

有効なすべてのHTTP応答コードのシンボリック定数を定義する標準Javaクラスライブラリに列挙型があるのだろうかと思います。対応する整数値との変換をサポートする必要があります。JavaにはHTTP応答コードの完全な列挙型がありますか?

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

答えて

203

の正確な整数値の静的定数がある私は、標準のJavaクラスで完全だ1がないと思います。 HttpURLConnectionには、HTTP 100/Continueのようなかなりのコードがありません。しかし、Apache Commonsには完全なリストがあります:org.apache.commons.HttpClient.HttpStatus

更新: Apache Commons HttpClientはend of lifeです。ステータスコードのリストについては、Apache HttpComponentsでorg.apache.http.HttpStatusを使用してください。

+4

ステータスコードが拡張される可能性があるので、"完全なリスト "のようなものはありません。 –

+10

@JulianReschke私は、ここで「完全」とは、「標準で概説されているすべてのコードに準拠している」ことを意味すると考えるべきです。 –

+2

ジョン: "標準"はステータスコードの "すべて"を定義していません。だからこそレジストリがあるのです。 –

22

まあ、HttpURLConnectionクラス

+4

thx!これは外部依存関係なしで機能します。 'java.net.HttpURLConnection.HTTP_BAD_REQUEST' – comonad

+0

重複した回答 – Nathan

42

サーブレットAPIのインターフェイスjavax.servlet.http.HttpServletResponseは、intの定数名SC_<description>の形式のすべての応答コードを持っています。

http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html

+2

HttpServletResponseはRFC1945とRFC2616標準の一部をサポートしていますが、RFC2518のすべてがありません。完全なリストが必要な場合は、前述のようにHttpStatusを参照してください。 –

+2

HttpServletResponseには、[RFC 2324](https://tools.ietf.org/html/rfc2324)に定義されている418応答コードもありません。 – megaflop

2

またのRestletステータスクラスをチェックアウトを参照してください。 servlet.http.HttpServletResponseクラス

例:

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

再度、ステータスコードは拡張可能であるため、新しいステータスコードがIANAレジストリ(http://www.iana.org/assignments/http-status-codes)に追加されるたびに改訂されない限り、「完全な」リストを作成することはできません。 –

13

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

+1

私はそのスプリングorg.springframework.http.HttpStatus(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.html)enumを追加したいと思います。私が見つけた唯一のものは、Java文書にステータスコードの完全なリストへのリンクと各列挙型でのその使用法に関する情報を提供しています。 既にSpringを使用している場合は、これが使用するライブラリになります。 – lastmannorth

5
+4

を開発するには、これらのコードを取得するだけでサーブレットAPI全体を組み込むのは面倒です。 –

+1

場合によっては負担になるかもしれませんが、私はこの良い答えを見つけました。私はサーブレットベースのWebアプリケーションを作成しています。 –

+2

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

0

ので、HTTPステータスコード定数のための最高のプロバイダは桟橋のorg.eclipse.jetty.http.HttpStatusクラスである可能性が高い:あなたが検索する場合に重要であるMavenの中のJavadocパッケージがある

  • 定数だけを知っている - > apiドキュメントページを開き、番号を検索する
  • 定数にはステータスコード番号が含まれています。

私が改善する点は、ステータスコード番号をテキストの説明の前に置き、コードで始めるときに自動補完検索をより便利にすることです。

-1

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

+1

もう1つの回答が既に重複しています – Nathan

5

あなたはネッティーを使用している場合は、使用することができます。

+0

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

3

皆さんの質問の「列挙型」の部分は無視されているようです。

HTTPステータスコードのための標準的なソースはありませんがへの簡単な方法はありにあなたがあなたのプロジェクトに追加の依存関係を追加することなく、javax.ws.rs.core.Response.Statusが提供するものに必要なすべての不足している状況定数を追加します。

javax.ws.rs.core.Response.Statusは、javax.ws.rs.core.Response.StatusTypeインターフェイスの1つの実装です。必要なステータスコードの定義で、独自の実装列挙型を作成するだけで済みます。などのjavax、ジャージーなど

コアライブラリがインタフェースStatusTypeに書き込まれていない実装Status(または、彼らは確かにする必要があります)。あなたの新しいステータスenumはStatusTypeを実装しているので、どこでも使用できます。javax.ws.rs.core.Response.Status定数を使用します。

あなた自身のコードもStatusTypeインターフェイスに書き込まれることを覚えておいてください。これにより、あなたは "標準"の側にあなたの両方のステータスコードを使用することができます。あなたが唯一のコードがある場合テキストは、あなたが使用することができた理由を取得するにはhttps://gist.github.com/avendasora/a5ed9acf6b1ee709a14a

1

1):

ここ

は、「情報の1xx」ステータスコードのために定義された定数との単純な実装との主旨です

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

ここで、httpCodeは、HTTP応答から取得したコードです。

は、あなたがテキストのみを持っている場合、あなたはBasicHttpResponseを使用することができた理由コードを取得するために、詳細 )のためhttps://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.htmlを参照してください。

詳細はこちらをご覧ください。https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html