6 votes

Est-il possible d'utiliser une valeur pour un @RequestMapping qui est une chaîne mais pas une chaîne littérale ?

Existe-t-il un moyen d'utiliser une valeur Enum dans un RequestMapping ?

@RequestMapping(value = "/example", 
method = RequestMethod.POST)
public final void foo(final HttpServletResponse response,

Je veux utiliser une valeur URL qui est déjà stockée dans un Enum.

Cependant, j'obtiens des erreurs de compilation lorsque j'essaie de mettre n'importe quoi d'autre qu'un littéral de type String dans le fichier RequestMapping .

Comment fait-il la différence entre une chaîne littérale et une chaîne qui n'est pas une chaîne littérale (je ne suis pas sûr de savoir comment cela s'appelle) ?

C'est ce que j'ai essayé mais cela a échoué au moment de la compilation :

@RequestMapping(value = FooEnum.Example.getStringValue(), 
method = RequestMethod.POST)
public final void foo(final HttpServletResponse response,

J'ai également essayé d'utiliser String.format mais il n'aime pas ça non plus :

@RequestMapping(value = String.format("%s", FooEnum.Example.getStringValue()), 
method = RequestMethod.POST)
public final void foo(final HttpServletResponse response,

1voto

Ryan Stewart Points 46960

Seules des valeurs littérales peuvent être attribuées aux attributs d'annotation car elles doivent être connues au moment de la compilation lorsque les annotations sont traitées. Oui, vous pouvez utiliser une valeur d'enum, où "valeur d'enum" est FooEnum.Example mais pas sur un attribut qui prend une valeur de type String, et vous ne pouvez pas appeler une méthode sur cet attribut.

0voto

Arlo Points 105

Lier votre URL à une valeur d'énumération semble étrange ; je ne voudrais pas que mes URL changent si je mets à jour l'énumération. Est-ce que vous générez réellement les liens clients en utilisant ces mêmes enums ? Peut-être qu'à la place, vous pourriez simplement interroger le bean Handler de Spring pour obtenir les URLs ?

Il y a aussi le Langage d'expression du printemps mais je sais seulement que cela fonctionne dans les annotations @Value, je ne suis pas sûr pour @RequestMapping.

Si vous essayez d'attraper plusieurs URL en une seule méthode, vous pourriez utiliser @PathVariable

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X