crea due metodi per lo stesso pattern URL con argomenti diversi


93

Ho uno scenario in cui un URL "serachUser" può venire con due valori diversi (parametro di richiesta) userId o UserName.

quindi per questo ho creato due metodi

public String searchUserById(@RequestParam long userID, Model model) 
public ModelAndView searchUserByName(@RequestParam String userName)

Ma ottengo l'eccezione trovata mappatura ambigua. La primavera ha un modo per gestire questa situazione.

Risposte:


197

È possibile utilizzare il paramsparametro per filtrare in base ai parametri HTTP. Nel tuo caso sarebbe qualcosa del tipo:

@RequestMapping(value = "/searchUser", params = "userID")
public String searchUserById(@RequestParam long userID, Model model) {
  // ...
}

@RequestMapping(value = "/searchUser", params = "userName")
public ModelAndView searchUserByName(@RequestParam String userName) {
  // ...
}

L'altro modo in cui l'ho gestito è accettare il parametro come String, quindi chiamare Long.parseLong () su di esso. Se analizza, allora è l'ID utente, in caso contrario, assume che sia il nome utente.
CodeChimp

9
Nel caso tu voglia sapere come funziona quando hai più parametri, puoi usareparams = { "storeId", "containerLabel" }
cindyxiaoxiaoli

se la mappatura dell'URL e tutti gli altri parametri sono gli stessi, è un'eccezione per il tempo di distribuzione?
Janath

Ma sarà possibile assegnare un ruolo / funzione diverso a questo URL da autorizzare?
Kanagavelu Sugumar

2
Correlati: Swagger potrebbe non supportare completamente questo. Ho trovato questo problema su github.com/springfox/springfox/issues/1828 . Uso Spring Fox 2.7.0 e l'interfaccia utente di Swagger mostra solo 1 metodo invece di 2. Apparentemente questo può essere risolto enableUrlTemplating(true)e utilizzando un'interfaccia utente sperimentale di Swagger: springfox.github.io/springfox/docs/current/…
Stephanie

0

In qualsiasi modo in caso di richiesta param null è consentito se non si passa alcun valore sarà null, quindi è possibile scrivere il proprio coad come:

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
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.