web-dev-qa-db-ja.com

サーブレットAPIのリクエストメソッド定数はどこにありますか?

書きたい

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

の代わりに

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

しかし、サーブレットAPIで定数定義を見つけることができません(HttpServletRequestでしか見ていませんでした)。

それらはどこにありますか(私は多くのライブラリを使用しているので、他の誰かがそれらを定義していれば、それも機能します)?

43
Thilo

Java EE 6はHTTPメソッド名をjavax.ws.rs.HttpMethodアノテーションインターフェイスに定数として追加しました。設定によっては、使用できる場合があります。

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

24
Matt Leidholm

これらの定数は、サーブレットでプライベートとして定義されています。

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";
...

メソッド名を文字通り使用するだけで問題ありません。

13
ZZ Coder

私の知る限り、その特定のプロパティには定数はありません。ただし、 定数の完全なリスト をチェックして、利用可能なものを確認できます。

もちろん、コードを記述しやすくするのであれば、いつでも独自の定数を定義できます。

12
Matt

Springでは(JDK以外でも)次を使用できます。

_org.springframework.web.bind.annotation.RequestMethod
_

これはすべてのHTTPメソッドを提供する列挙型です

したがって、RequestMethod.POST.name()を使用できます

7
Matthias M

なぜこれに列挙型が定義されていないのか疑問に思う場合は、この質問と回答で説明されています: なぜHttpRequest.HttpMethodはEnumではなくstring?

結論として、HTTP仕様は許可されるメソッドのセットを制限しないため、仕様で明示的に言及されているもの以外に追加のメソッドを使用できます。

1
Machaba

JDK以外では、Apache AxisにはPOSTのパブリック定数があります(ただし、他のメソッドの場合はありません):

org.Apache.axis.transport.http.HTTPConstants.HEADER_POST

1
Thilo