我想写
if (POST.equals(req.getMethod()))
而不是
if ("POST".equals(req.getMethod()))
但是我找不到Servlet API中的常量定义(仅查看HttpServletRequest,我期望它们在那里)。
他们在哪里(我使用了大量的库,所以如果其他人定义了它们,那也会有效)?
答案 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的公共常量(但不适用于任何其他方法):
答案 5 :(得分:1)
如果您想知道为什么没有为此定义任何枚举,请在此问答中解释:Why HttpRequest.HttpMethod is string instead of Enum?
最重要的是,HTTP规范并不限制允许的方法集,因此除了规范中明确提到的方法之外,可以使用其他方法。