Come utilizzare più annotazioni @RequestMapping in primavera?


247

È possibile utilizzare più @RequestMappingannotazioni su un metodo?

Piace :

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

Risposte:


436

@RequestMappingha un String[]parametro value, quindi dovresti essere in grado di specificare più valori come questo:

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


2
Detto questo, ho problemi a far funzionare i valori "" o "/" nella mia applicazione. Funzionano per te?
Ed Brannin,

Esiste un modo per associare diverse visualizzazioni di successo e viste modulo a ciascun URL di richiesta utilizzando più annotazioni?
k-den,

@EdBrannin Ne ho bisogno di molti da usare, personalizzati, intestazione, consuma, parametri, ecc.
DeFreitas

Inoltre vorrei sapere come faccio a sapere quale richiesta di richiesta è stata chiamata. è / o benvenuto?
Siddharth,

1
@Siddharth 1. Potresti essere in grado di aggiungere e ispezionare un parametro di tipo HttpRequest. 2. Se ti interessa davvero quale mapping è stato chiamato, forse non utilizzare questa tecnica. ;)
Ed Brannin il

24

Dal mio test (primavera 3.0.5), @RequestMapping(value={"", "/"}) - "/"funziona solo , ""no. Tuttavia ho scoperto questo funziona: @RequestMapping(value={"/", " * "})il " * "niente partite, così sarà il gestore predefinito nel caso in cui nessun altro.


13

Non serve. L'annotazione RequestMapping supporta caratteri jolly e percorsi in stile formica. Sembra anche che tu voglia solo una vista predefinita, quindi puoi metterlo

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

nel tuo file di configurazione. Ciò inoltrerà tutte le richieste alla radice alla vista di benvenuto.


Dovrebbe esserci qualcosa tra queste due linee? Sto usando FreeMarkerViewResolver - quindi dovrei andare in questo modo ... Beh, immagino che potrei semplicemente creare più ViewResolver.
pranza il

2
Non offre la flessibilità fornita da più annotazioni RequestMapping. Ad esempio, se voglio avere un metodo che supporti il ​​valore "/ a" con POST o il valore "/ b" con GET. Naturalmente la soluzione alternativa è abbastanza semplice (refactoring della funzionalità in un terzo metodo), ma solo dicendo che sarebbe utile.
simon,

1

Il modo più breve è: @RequestMapping({"", "/", "welcome"})

Anche se puoi anche fare:

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

1

In questo momento con l'utilizzo di Spring-Boot 2.0.4 - {} non funzionerà.

@RequestMapping

ha ancora String [] come parametro value, quindi la dichiarazione è simile alla seguente:

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

** Aggiornamento - Funziona con Spring-Boot 2.2 **

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

Le parentesi quadre non sono valide. La sintassi valida per un array letterale è l'uso delle parentesi graffe {}
luis.espinal,

@ luis.espinal Parentesi quadre lavorate con la versione Spring-Boot 2.0.4. Aggiornerò il mio post.
Falcon,

0

È accettabile anche quanto segue:

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

Lo stesso può essere applicato @RequestMappinganche a


-2

È meglio usare l'annotazione PathVariable se si desidera ancora ottenere l'uri che è stato chiamato.

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

o analizzarlo dall'oggetto richiesta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.