使用不同的参数为相同的url模式创建两个方法

Sti*_*ler 68 spring spring-mvc

我有一个网址,其中一个网址"serachUser"可能带有两个不同的值(请求参数)userId或UserName.

所以为此我创造了两种方法

public String searchUserById(@RequestParam long userID, Model model) 
public ModelAndView searchUserByName(@RequestParam String userName)
Run Code Online (Sandbox Code Playgroud)

但我得到Ambiguous映射发现异常.Spring有办法处理这种情况.

kry*_*ger 152

您可以使用该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) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想知道当你有多个参数时它是如何工作的,你可以使用`params = {"storeId","containerLabel"}` (7认同)
  • 相关:Swagger 可能不完全支持这一点。我发现这个问题 http://github.com/springfox/springfox/issues/1828。我使用 Spring Fox 2.7.0 并且 Swagger UI 只显示 1 个方法而不是 2 个。显然这可以通过 `enableUrlTemplating(true)` 和使用实验性 Swagger UI 来解决:http://springfox.github.io/springfox/文档/当前/#springfox-rfc6570-support-strong-incubating-strong (3认同)