¿Dónde están las constantes del método de solicitud en la API del servlet?

Quiero escribir

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

en lugar de

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

pero no puedo encontrar las definiciones constantes en la API de Servlet (solo busqué en HttpServletRequest, donde esperaba que estuvieran).

¿Dónde están ellos (estoy usando muchas bibliotecas, entonces si alguien más las define, eso también funcionaría)?

Parece que Java EE 6 agregó los nombres de método HTTP como constantes a la interfaz de anotación javax.ws.rs.HttpMethod. Dependiendo de su configuración, pueden estar disponibles para usted.

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

Estas constantes se definen como privadas en Servlet,

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

Está perfectamente bien usar el nombre del método literalmente.

Hasta donde yo sé, no hay constantes para esa propiedad en particular. Sin embargo, puede consultar la lista completa de constantes para ver qué está disponible.

Por supuesto, siempre puede definir sus propias constantes si hace que su código sea más fácil de escribir.

En Spring (también fuera de JDK), puedes usar:

 org.springframework.web.bind.annotation.RequestMethod 

Esta es una enumeración que proporciona todos los métodos HTTP

Entonces puede usar RequestMethod.POST.name()

Fuera del JDK, Apache Axis tiene una constante pública para POST (pero no para ninguno de los otros métodos):

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

Si se pregunta por qué no hay enumeraciones definidas para esto, eso se explica en esta pregunta y respuesta: ¿Por qué HttpRequest.HttpMethod es cadena en lugar de Enum?

En pocas palabras, la especificación HTTP no restringe el conjunto de métodos permitidos, por lo que se pueden utilizar métodos adicionales además de los que se mencionan explícitamente en la especificación.