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规范不限制允许的方法集合,所以除了规范中明确提到的那些外,还可以使用其他方法。