buat dua metode untuk pola url yang sama dengan argumen berbeda

93

Saya memiliki skenario di mana satu url "serachUser" mungkin datang dengan dua nilai berbeda (parameter permintaan) userId atau UserName.

jadi untuk ini saya telah membuat dua metode

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

Tapi saya mendapatkan pengecualian pemetaan ambigu. Spring punya cara untuk menangani situasi ini.

Vikas Singh
sumber

Jawaban:

197

Anda dapat menggunakan paramsparameter untuk memfilter berdasarkan parameter HTTP. Dalam kasus Anda, ini akan menjadi seperti:

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

@RequestMapping(value = "/searchUser", params = "userName")
public ModelAndView searchUserByName(@RequestParam String userName) {
  // ...
}
kryger
sumber
Cara lain saya menangani ini adalah menerima parameter sebagai String, lalu panggil Long.parseLong () di atasnya. Jika parsing, maka itu adalah userId, jika tidak, anggap sebagai nama penggunanya.
CodeChimp
9
Jika Anda ingin tahu cara kerjanya ketika Anda memiliki beberapa parameter, Anda dapat menggunakanparams = { "storeId", "containerLabel" }
cindyxiaoxiaoli
jika pemetaan url dan semua parameter lainnya sama, apakah ini memberikan pengecualian waktu penerapan?
Janath
Tetapi apakah mungkin untuk menetapkan peran / fungsi yang berbeda ke url ini untuk memberi otorisasi?
Kanagavelu Sugumar
2
Terkait: Kesombongan mungkin tidak sepenuhnya mendukung ini. Saya menemukan masalah ini github.com/springfox/springfox/issues/1828 . Saya menggunakan Spring Fox 2.7.0 dan UI Swagger hanya menampilkan 1 metode, bukan 2. Tampaknya ini dapat diperbaiki dengan enableUrlTemplating(true)dan menggunakan UI Swagger eksperimental: springfox.github.io/springfox/docs/current/…
Stephanie
0

Dengan cara apapun permintaan parameter null diperbolehkan jika Anda tidak memberikan nilai apapun itu akan menjadi null maka Anda dapat menulis coad Anda seperti:

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
Tek.Sailendra
sumber