1. 程式人生 > >Ambiguous handler methods mapped for '/user/1'

Ambiguous handler methods mapped for '/user/1'

使用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

 或 http://localhost:8080/user/i/1 來請求

均可以正常訪問到後臺物件內容