Где константы метода запроса в API Servlet?
Я хочу написать
if (POST.equals(req.getMethod()))
вместо
if ("POST".equals(req.getMethod()))
но я не могу найти константные определения в API сервлета (только в HttpServletRequest, где я ожидал, что это будет).
Где они (я использую большое количество библиотек, поэтому, если кто-то их определяет, это тоже сработает)?
Ответы
Ответ 1
Похоже, что Java EE 6 добавила имена методов HTTP в качестве констант в интерфейс аннотации javax.ws.rs.HttpMethod. В зависимости от вашей установки они могут быть доступны вам.
http://docs.oracle.com/javaee/6/api/javax/ws/rs/HttpMethod.html
Ответ 2
Насколько я знаю, для этого конкретного свойства нет никаких констант. Вы можете проверить полный список констант, чтобы узнать, что доступно.
Конечно, вы всегда можете определить свои собственные константы, если это упростит ваш код.
Ответ 3
Эти константы определены как частные в 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";
...
Это прекрасно, просто используя имя метода буквально.
Ответ 4
В Spring (так что вне JDK тоже) вы можете использовать:
org.springframework.web.bind.annotation.RequestMethod
Это перечисление, которое предоставляет все методы HTTP
Итак, вы можете использовать RequestMethod.POST.name()
Ответ 5
Вне JDK Axis Axis имеет общедоступную константу для POST (но не для любого другого метода):
org.apache.axis.transport.http.HTTPConstants.HEADER_POST
Ответ 6
Если вам интересно, почему для этого нет никаких перечислений, которые объясняются в этом вопросе и ответе: Почему HttpRequest.HttpMethod - это строка вместо Enum?
В нижней строке спецификация HTTP не ограничивает набор допустимых методов, поэтому можно использовать дополнительные методы помимо тех, которые явно указаны в спецификации.