web-dev-qa-db-fra.com

Où sont les constantes de méthode de demande dans l'API Servlet?

Je veux ecrire

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

au lieu de

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

mais je ne trouve pas les définitions constantes dans l'API Servlet (uniquement recherchées dans HttpServletRequest, où je m'attendais à ce qu'elles soient).

Où sont-ils (j'utilise beaucoup de bibliothèques, donc si quelqu'un d'autre les définit, cela fonctionnerait aussi)?

44
Thilo

Il semble que Java EE 6 a ajouté les noms de méthode HTTP en tant que constantes à l'interface d'annotation javax.ws.rs.HttpMethod. Selon votre configuration, ils peuvent être disponibles pour vous.

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

25
Matt Leidholm

Pour autant que je sache, il n'y a pas de constantes pour cette propriété particulière. Vous pouvez cependant consulter la liste complète des constantes pour voir ce qui est disponible.

Bien sûr, vous pouvez toujours définir vos propres constantes si cela facilite l'écriture de votre code.

12
Matt

Ces constantes sont définies comme privées dans 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";
...

C'est parfaitement bien d'utiliser le nom de la méthode littéralement.

12
ZZ Coder

Au printemps (donc en dehors du JDK aussi), vous pouvez utiliser:

org.springframework.web.bind.annotation.RequestMethod

Ceci est une énumération qui fournit toutes les méthodes HTTP

Vous pouvez donc utiliser RequestMethod.POST.name()

7
Matthias M

Si vous vous demandez pourquoi aucune énumération n'est définie pour cela, cela est expliqué dans cette question et réponse: Pourquoi HttpRequest.HttpMethod est une chaîne au lieu de Enum?

En bout de ligne, la spécification HTTP ne restreint pas l'ensemble des méthodes autorisées, donc des méthodes supplémentaires peuvent être utilisées au-delà de celles qui sont explicitement mentionnées dans la spécification.

1
Machaba

En dehors du JDK, Apache Axis a une constante publique pour POST (mais pas pour les autres méthodes):

org.Apache.axis.transport.http.HTTPConstants.HEADER_POST

1
Thilo