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

我想写

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

代替

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

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

他们在哪里(我正在使用大量的图书馆,所以如果有人定义他们,那也可以)?

Java EE 6似乎将HTTP方法名称添加为javax.ws.rs.HttpMethod批注接口的常量。 根据您的设置,它们可能会提供给您。

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

据我所知,这个特定的财产没有任何常数。 虽然你可以查看完整的常量列表来查看可用的东西。

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

这些常量在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"; ... 

只是简单地使用方法名称就好了。

在Spring(也就是JDK之外)中,你可以使用:

 org.springframework.web.bind.annotation.RequestMethod 

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

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

在JDK之外,Apache Axis拥有POST的公共常量(但不包括其他任何方法):

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

如果你想知道为什么没有为此定义任何枚举,在这个问题和解答中解释: 为什么HttpRequest.HttpMethod是string而不是枚举?

底线,HTTP规范不限制允许的方法集合,所以除了规范中明确提到的那些外,还可以使用其他方法。