створити два методи для одного шаблону url з різними аргументами


87

У мене є сценарій, коли одна URL-адреса "serachUser" може мати два різні значення (параметр запиту) userId або UserName.

тож для цього я створив два методи

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

Але я отримую неоднозначне відображення знайденого винятку. Весна має будь-який спосіб вирішити цю ситуацію.

Відповіді:


188

Параметр можна використовувати paramsдля фільтрації за параметрами HTTP. У вашому випадку це було б приблизно так:

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

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

Інший спосіб, з яким я впорався з цим, - це прийняти параметр як String, а потім викликати Long.parseLong () на ньому. Якщо він аналізує, то його userId, якщо ні, прийміть його ім'я користувача.
CodeChimp

9
Якщо ви хочете знати, як це працює, коли у вас кілька параметрів, ви можете використовуватиparams = { "storeId", "containerLabel" }
cindyxiaoxiaoli

якщо відображення url та всі інші параметри однакові, це дає виняток часу розгортання?
Джанат

Але чи можна призначити іншу роль / функцію цій URL-адресі для авторизації?
Канагавелу Сугумар

2
Пов’язане: Swagger може не повністю підтримувати це. Я знайшов цю проблему github.com/springfox/springfox/issues/1828 . Я використовую Spring Fox 2.7.0, а інтерфейс Swagger показує лише 1 метод замість 2. Очевидно, це можна виправити за enableUrlTemplating(true)допомогою експериментального інтерфейсу Swagger: springfox.github.io/springfox/docs/current/…
Стефані

0

Будь-яким способом у випадку запиту param null дозволено, якщо ви не передасте будь-яке значення, воно буде нулем, тоді ви можете написати свій coad, як:

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.