2009-12-07 17 views
38

は、私が代わりにServlet APIのリクエストメソッドの定数はどこにありますか?

if ("POST".equals(req.getMethod())) 

if (POST.equals(req.getMethod())) 

を書きたいが、私は(唯一の私は彼らがあることが予想のHttpServletRequestに見えた)サーブレットAPIで定数の定義を見つけることができません。

どこにあるのですか(私は多くのライブラリを使用していますので、他の人がそれを定義していればそれも有効でしょう)?

+0

だからあなたが使用できるすべてのHTTPメソッドを提供して列挙され

org.springframework.web.bind.annotation.RequestMethod 

メインのJavaクラスライブラリでも、ちょっとしたことに、それらを定数として見つけることができず、 'java.net.HttpURLConnection'でさえもそうではありませんでした。 – Powerlord

+0

なぜ〜ハードコーディングが悪いのかを覚えておくことが重要です。ハードコーディングの値は、(1)読みやすさ(「なぜここで3849を使用したのですか?」)または(2)バグの原因となる場合があります。 1)。ケース2の場合、この値は変数/定数に入れて1回だけ変更する必要があります。 "POST"の代わりにPOSTを使用すると、(1)または(2)のいずれも害を受けないので、 "hardcoded"値を使用すると問題ありません。 –

答えて

20

Java EE 6は、定数としてHTTPメソッド名を追加したことが表示されますjavax.ws.rs.HttpMethodアノテーションインタフェースに追加します。あなたの設定に応じて、彼らはあなたに利用可能かもしれません。

http://docs.oracle.com/javaee/6/api/javax/ws/rs/HttpMethod.html

+1

Jax-rsを使用している場合に便利ですが、正しいですが、これは定数のわかりにくい場所です。代わりにサーブレットAPIに移動する必要があります。 –

12

私が知る限り、その特定のプロパティの定数はありません。あなたはfull list of constantsをチェックアウトして、利用可能なものを見ることができます。

もちろん、コードを簡単に書くことができる場合は、いつでも独自の定数を定義できます。

+1

その後、javax.servletにはありません。奇妙なことに彼らは基本的なものを見逃しているが、DIGEST_AUTHの定数を持っている... – Thilo

+0

少なくとも彼らはすべてのHTTPステータスコードを持っている。 – Thilo

+1

@Mattこれはあなたが答えたときに当てはまりましたが、Java 6以降、これらの定数は存在します。更新してください:) –

12

これらの定数は、それはちょうど、文字通りメソッド名を使用して完全に大丈夫です

public abstract class HttpServlet extends GenericServlet 
    implements java.io.Serializable 
{ 
    private static final String METHOD_DELETE = "DELETE"; 
    private static final String METHOD_HEAD = "HEAD"; 
    private static final String METHOD_GET = "GET"; 
    private static final String METHOD_OPTIONS = "OPTIONS"; 
    private static final String METHOD_POST = "POST"; 
    private static final String METHOD_PUT = "PUT"; 
    private static final String METHOD_TRACE = "TRACE"; 
... 

、サーブレットにプライベートとして定義されています。 JDKの

+2

これはとてもいいですが、これらのフィールドはプライベートです! –

1

このために定義された任意の列挙型はありませんなぜあなたは不思議場合は、それはこの質問と回答で説明しています:Why HttpRequest.HttpMethod is string instead of Enum?

ボトムライン、HTTPの仕様では許可されているメソッドのセットを制限するものではありませんしたがって、仕様で明示的に言及されている方法以外の追加の方法が使用されてもよい。 (あまりにもそうJDK外、)春に

+0

.NETにはJavaにはない文字列定数があるようです。 – Thilo

7

あなたが使用することができます。これは、私は少し周りつついRequestMethod.POST.name()

関連する問題