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.

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) {
  // ...
}

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{
// ...
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.