欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ambiguous handler methods mapped for HTTP path

程序员文章站 2022-03-01 13:37:32
...

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));
    }

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

相关标签: ----【Spring】