1、问题描述

错误提示信息提示说 findAll() 方法和 findById() 方法的HTTP映射不明确,或者说这两个方法的映射重复。意思是Controller中有两个模棱两可的处理方法,这两个方法有歧义,无法分清是谁,因为spring无法根据传参的类型自动匹配到可以处理的方法。

Ambiguous handler methods mapped for HTTP path_解决方法来看下造成映射重复的代码是什么样子的:

@RequestMapping(value = "/{findAll}",method = RequestMethod.GET)
@ApiOperation(value = "查询所有信息")
public Result findAll(){
return new Result(true, StatusCode.OK,"查询成功",labelService.findAll());
}


@RequestMapping(value = "/{labelId}",method = RequestMethod.GET)
@ApiOperation(value = "根据id查询label")
public Result findById(@PathVariable("labelId") String labelId){
return new Result(true,StatusCode.OK,"查询成功",labelService.findById(labelId));
}

我本来是想要分别访问 /findAll 和 /lablelId ,但是却提示我映射的是同一个。因为我想要用Restful编程风格,所以就必须改变请求的 url 格式,保证url对应的方法不会产生歧义。

上面的写法有问题:用 {} 包裹起来的变量好像会被模糊化。

2、解决方法

@RequestMapping(value = "/{findAll}",method = RequestMethod.GET)
@ApiOperation(value = "查询所有信息")
public Result findAll(){
return new Result(true, StatusCode.OK,"查询成功",labelService.findAll());
}

@RequestMapping(value = "/findById/labelId/{labelId}",method = RequestMethod.GET)
@ApiOperation(value = "根据id查询label")
public Result findById(@PathVariable("labelId") String labelId){
return new Result(true,StatusCode.OK,"查询成功",labelService.findById(labelId));
}

将请求路径做以区分,这样两个方法就能互不影响都能成功查询了。