Comment utiliser plusieurs annotations @RequestMapping au printemps?


247

Est-il possible d'utiliser plusieurs @RequestMappingannotations sur une méthode?

Comme :

@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
  return "welcome";
}

Réponses:


436

@RequestMappinga un String[]paramètre de valeur, vous devriez donc être en mesure de spécifier plusieurs valeurs comme ceci:

@RequestMapping(value={"", "/", "welcome"})


2
Cela dit, j'ai du mal à faire fonctionner les valeurs "" ou "/" dans mon application. Travaillent-ils pour vous?
Ed Brannin

Existe-t-il un moyen d'associer différentes vues de réussite et vues de formulaire à chaque URL de demande à l'aide de plusieurs annotations?
k-den

@EdBrannin J'ai besoin de plusieurs à utiliser, personnalisé, en-tête, consomme, paramètres, etc.
deFreitas

Je voudrais également savoir comment savoir quelle demande de mappage a été appelée. est-ce / ou bienvenue?
Siddharth

1
@Siddharth 1. Vous pourrez peut-être ajouter et inspecter un paramètre de type HttpRequest. 2. Si vous vous souciez vraiment du mappage qui a été appelé, n'utilisez peut-être pas cette technique. ;)
Ed Brannin

24

D'après mon test (printemps 3.0.5), @RequestMapping(value={"", "/"}) - ne "/"fonctionne que, ""ne fonctionne pas. Cependant, j'ai découvert que cela fonctionne:, @RequestMapping(value={"/", " * "})le " * "correspond à n'importe quoi, donc ce sera le gestionnaire par défaut au cas où aucun autre.


13

N'en a pas besoin. L'annotation RequestMapping prend en charge les caractères génériques et les chemins de style fourmi. On dirait aussi que vous voulez juste une vue par défaut, donc vous pouvez mettre

<mvc:view-controller path="/" view-name="welcome"/>

dans votre fichier de configuration. Cela transmettra toutes les demandes à la racine à la vue de bienvenue.


Est-il censé y avoir quelque chose entre ces deux lignes? J'utilise FreeMarkerViewResolver - donc je devrais suivre cette voie ... Eh bien, je suppose que je pourrais simplement créer plusieurs ViewResolver.
bénévole

2
Il n'offre pas la flexibilité que fourniraient plusieurs annotations RequestMapping. Par exemple, si je veux qu'une méthode prenne en charge la valeur "/ a" avec POST ou la valeur "/ b" avec GET. Bien sûr, la solution de contournement est assez facile (refactoriser la fonctionnalité dans une troisième méthode), mais simplement dire que ce serait utile.
simon

1

Le moyen le plus court est: @RequestMapping({"", "/", "welcome"})

Bien que vous puissiez également faire:

  • @RequestMapping(value={"", "/", "welcome"})
  • @RequestMapping(path={"", "/", "welcome"})

1

Pour l'instant, avec Spring-Boot 2.0.4 - {} ne fonctionnera pas.

@RequestMapping

a toujours String [] comme paramètre de valeur, donc la déclaration ressemble à ceci:

 @RequestMapping(value=["/","/index","/login","/home"], method = RequestMethod.GET)

** Mise à jour - Fonctionne avec Spring-Boot 2.2 **

 @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)

Les crochets ne sont pas valides. La syntaxe valide pour un littéral de tableau est d'utiliser des accolades {}
luis.espinal

@ luis.espinal Les crochets ont fonctionné avec la version 2.0.4 Spring-Boot. Je mettrai à jour mon message.
Falcon

0

Ce qui suit est également acceptable:

@GetMapping(path = { "/{pathVariable1}/{pathVariable1}/somePath", 
                     "/fixedPath/{some-name}/{some-id}/fixed" }, 
            produces = "application/json")

La même chose peut être appliquée à @RequestMappingaussi bien


-2

Il est préférable d'utiliser l'annotation PathVariable si vous souhaitez toujours obtenir l'URI qui a été appelé.

@PostMapping("/pub/{action:a|b|c}")
public JSONObject handlexxx(@PathVariable String action, @RequestBody String reqStr){
...
}

ou l'analyser à partir de l'objet de demande.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.