我有两个Rest URI:
// URI n1 : GET /users/{userName}
public ResponseEntity<userDto> findUserByName(
@PathVariable( value = "userName", required = true)
String userName
);
// URI n2 : GET /users/{userID}
public ResponseEntity<userDto> findUserByID(
@PathVariable( value = "userID", required = true)
Long userID
);
当我调用GET /users/SuperUser123
时,我希望第一个函数响应;当我调用GET /users/1854
时,我希望第二个函数响应。真正发生的是,在两种情况下都总是调用第一个函数(因为参数始终是String类型的。)
那么在遵守REST API URI建议的同时如何实现我想要的?
答案 0 :(得分:0)
由于两种方法的url模式相同,因此将给出模糊的映射运行时异常。
如果您的网址具有某种模式(例如超级用户启动)或其他某种形式,则可以使用正则表达式模式使其正常工作。
在下面的示例中,如果path变量是数字,则将调用第一个方法method,否则将调用第二个字母方法。您可以相应地更改正则表达式模式。
@RequestMapping("{id:[0-9]+}")
public String handleRequest(@PathVariable("id") String userId, Model model){
model.addAttribute("msg", "profile id: "+userId);
return "my-page";
}
@RequestMapping("{name:[a-zA-Z]+}")
public String handleRequest2 (@PathVariable("name") String deptName, Model model) {
model.addAttribute("msg", "dept name : " + deptName);
return "my-page";
}