Servlet API中的请求方法常量在哪里?

时间:2009-12-07 03:26:26

标签: java servlets

我想写

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

而不是

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

但是我找不到Servlet API中的常量定义(仅查看HttpServletRequest,我期望它们在那里)。

他们在哪里(我使用了大量的库,所以如果其他人定义了它们,那也会有效)?

6 个答案:

答案 0 :(得分:23)

Java EE 6似乎将HTTP方法名称作为常量添加到javax.ws.rs.HttpMethod注释接口。根据您的设置,您可以使用它们。

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

答案 1 :(得分:13)

这些常量在Servlet中被定义为private,

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

直接使用方法名称完全没问题。

答案 2 :(得分:12)

据我所知,该特定财产没有任何常数。您可以查看full list of constants以查看可用的内容。

当然,如果它使代码更容易编写,你总是可以定义自己的常量。

答案 3 :(得分:7)

在Spring中(也在JDK之外),您可以使用:

org.springframework.web.bind.annotation.RequestMethod

这是一个提供所有HTTP方法的枚举

所以你可以使用RequestMethod.POST.name()

答案 4 :(得分:1)

在JDK之外,Apache Axis有一个POST的公共常量(但不适用于任何其他方法):

org.apache.axis.transport.http.HTTPConstants.HEADER_POST

答案 5 :(得分:1)

如果您想知道为什么没有为此定义任何枚举,请在此问答中解释:Why HttpRequest.HttpMethod is string instead of Enum?

最重要的是,HTTP规范并不限制允许的方法集,因此除了规范中明确提到的方法之外,可以使用其他方法。