Где константы метода запроса в Servlet API? - PullRequest
42 голосов
/ 07 декабря 2009

Я хочу написать

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

вместо

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

но я не могу найти определения констант в Servlet API (смотрел только в HttpServletRequest, где я ожидал, что они будут).

Где они (я использую много библиотек, поэтому, если кто-то их определит, это тоже сработает)?

Ответы [ 6 ]

23 голосов
/ 12 марта 2012

Похоже, что Java EE 6 добавил имена методов HTTP в качестве констант в интерфейс аннотаций javax.ws.rs.HttpMethod. В зависимости от ваших настроек они могут быть вам доступны.

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

13 голосов
/ 07 декабря 2009

Эти константы определены как частные в сервлете,

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

Это прекрасно, просто буквально используя имя метода.

12 голосов
/ 07 декабря 2009

Насколько я знаю, для этого конкретного свойства нет никаких констант. Вы можете проверить полный список констант , чтобы увидеть, что доступно.

Конечно, вы всегда можете определить свои собственные константы, если это облегчает написание кода.

7 голосов
/ 30 сентября 2013

Весной (поэтому и вне JDK) вы можете использовать:

org.springframework.web.bind.annotation.RequestMethod

Это перечисление, которое предоставляет все методы HTTP

Так что вы можете использовать RequestMethod.POST.name()

1 голос
/ 12 июля 2013

Если вам интересно, почему для этого не определены никакие перечисления, это объясняется в этом вопросе и ответе: Почему HttpRequest.HttpMethod - это строка вместо Enum?

Итог: спецификация HTTP не ограничивает набор разрешенных методов, поэтому могут использоваться дополнительные методы, помимо тех, которые явно указаны в спецификации.

1 голос
/ 07 декабря 2009

За пределами JDK Apache Axis имеет открытую константу для POST (но не для других методов):

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...