다른 인수를 사용하여 동일한 URL 패턴에 대해 두 가지 방법을 만듭니다.


87

하나의 URL "serachUser"가 두 개의 다른 값 (요청 매개 변수) userId 또는 UserName과 함께 올 수있는 시나리오가 있습니다.

그래서 이것을 위해 두 가지 방법을 만들었습니다

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

하지만 모호한 매핑 발견 예외가 발생합니다. Spring은 이러한 상황을 처리 할 수있는 방법이 있습니다.

답변:


186

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 ()을 호출하는 것입니다. 구문 분석하면 사용자 ID가 그렇지 않은 경우 사용자 이름으로 간주됩니다.
CodeChimp 2013

9
경우에 당신은 당신이 여러 PARAMS있을 때 작동 방법을 알고 싶어요, 당신은 사용할 수 있습니다params = { "storeId", "containerLabel" }
cindyxiaoxiaoli

URL 매핑과 다른 모든 매개 변수가 동일하면 배포 시간 예외가 발생합니까?
Janath 2016-04-08

그러나 인증을 위해이 URL에 다른 역할 / 기능을 할당 할 수 있습니까?
Kanagavelu Sugumar

2
관련 : Swagger는 이것을 완전히 지원하지 않을 수 있습니다. 이 문제를 발견했습니다 github.com/springfox/springfox/issues/1828 . 저는 Spring Fox 2.7.0을 사용하고 Swagger UI는 2 대신 1 개의 방법 만 표시합니다. 분명히 이것은 enableUrlTemplating(true)실험적인 Swagger UI를 사용하여 수정할 수 있습니다 . springfox.github.io/springfox/docs/current/…
Stephanie

0

어떤 식 으로든 요청 매개 변수의 경우 null 값을 전달하지 않으면 null이 허용되며 다음과 같이 coad를 작성할 수 있습니다.

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.