为具有不同参数的相同网址格式创建两个方法


87

我有一个方案,其中一个网址“ serachUser”可能带有两个不同的值(请求参数)userId或UserName。

为此,我创建了两种方法

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

但是我越来越模糊的映射发现异常。Spring有任何方法可以处理这种情况。

Answers:


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()。如果解析,则其为userId;如果未解析,则假设其为用户名。
CodeChimp

9
如果您想知道当有多个参数时它是如何工作的,可以使用params = { "storeId", "containerLabel" }
cindyxiaoxiaoli

如果url映射和所有其他参数相同,是否会给出部署时间例外?
Janath '16

但是是否可以为此URL分配不同的角色/功能进行授权?
卡纳加维卢·苏古玛

2
相关消息:Swagger可能不会完全支持这一点。我发现了这个问题github.com/springfox/springfox/issues/1828。我使用Spring福克斯2.7.0和扬鞭UI仅示出1点的方法,而不是2。显然,这可以通过固定enableUrlTemplating(true)并使用实验扬鞭UI:springfox.github.io/springfox/docs/current/...
斯蒂芬妮

0

如果您不传递任何值,则允许以任何方式将请求参数null设置为null,那么您可以像下面这样编写代码:

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.