Ambiguous handler methods mapped for '/user/1'
阿新 • • 發佈:2019-01-06
使用rest程式設計風格時,可以直接將變數值放入到url中,傳遞到後臺,後臺自動識別對應的方法,方便很多。
但若出現方法過載的情況,則可能會出問題,如下
@RestController @RequestMapping("/user") public class UserController { @Resource private UserService us; @ResponseBody @GetMapping("/{username}") public User getUser(@PathVariable("username")String username) { return us.getUser(username); } @ResponseBody @GetMapping("/{id}") public User getUser(@PathVariable("id")Integer id) { return us.findUserById(id); } }
在瀏覽器位址列訪問 http://localhost:8080/user/1 或 http://localhost:8080/user/lucy 時均會出現如下錯誤
Ambiguous handler methods mapped for '/user/lucy' ,字面含義,模稜兩可的處理方法對於'/user/lucy' ,有兩個或以上的方法對於'/user/lucy',這裡說明,spring無法根據傳參的型別自動匹配處理的方法。
此時,如果依然想使用rest程式設計風格,則必須改變請求url的格式,必須時url對應的方法不產生歧義
針對上面的例子,可以給變數前面增加引數的型別簡寫,這樣就可以匹配到不同的方法
@ResponseBody
@GetMapping("/s/{username}")
public User getUser(@PathVariable("username")String username) {
return us.getUser(username);
}
@ResponseBody
@GetMapping("/i/{id}")
public User getUser(@PathVariable("id")Integer id) {
return us.findUserById(id);
}
再到瀏覽器位址列通過 http://localhost:8080/user/s/lucy
均可以正常訪問到後臺物件內容