aynı url kalıbı için farklı bağımsız değişkenlerle iki yöntem oluşturun


93

Bir url "serachUser" ın iki farklı değer (istek parametresi) userId veya UserName ile gelebileceği bir senaryom var.

bu yüzden bunun için iki yöntem oluşturdum

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

Ama belirsiz haritalama istisna bulundu. Baharın bu durumla başa çıkmanın bir yolu var.

Yanıtlar:


197

paramsParametreyi HTTP parametrelerine göre filtrelemek için kullanabilirsiniz . Senin durumunda şöyle bir şey olurdu:

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

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

Bunu hallettiğim diğer yol, parametreyi bir String olarak kabul etmek ve ardından Long.parseLong () 'u çağırmaktı. Ayrıştırırsa, userId, yapmazsa, kullanıcı adını varsayar.
CodeChimp

9
Birden fazla parametreniz olduğunda nasıl çalıştığını bilmek istiyorsanız, kullanabilirsinizparams = { "storeId", "containerLabel" }
cindyxiaoxiaoli

url eşlemesi ve diğer tüm parametreler aynıysa, bir dağıtım zamanı istisnası verir mi?
Janath

Ancak yetkilendirmek için bu url'ye farklı bir rol / işlev atamak mümkün olacak mı?
Kanagavelu Sugumar

2
İlgili: Swagger bunu tam olarak desteklemeyebilir. Bu sorunu github.com/springfox/springfox/issues/1828 buldum . Spring Fox 2.7.0 kullanıyorum ve Swagger UI yalnızca 2 yerine 1 yöntem gösteriyor. Görünüşe göre bu, enableUrlTemplating(true)deneysel bir Swagger kullanıcı arayüzü kullanılarak düzeltilebilir : springfox.github.io/springfox/docs/current/…
Stephanie

0

Herhangi bir şekilde istek parametresinin null olması durumunda izin verilir, eğer herhangi bir değeri geçmezseniz boş olacaktır, o zaman coad'ınızı şöyle yazabilirsiniz:

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.