Spring MVC RestController Ambiguous PathVariable mapping

时间:2017-11-09 07:23:11

标签: java spring-mvc spring-boot spring-restcontroller

我有2个 GET 处理程序方法

 @RestController
 public class TestController {

    ...

    @GetMapping(name = "/test")
    public Test testMethod() {
        return testService.getTest();
    }

    @GetMapping(name = "/test/{count}")
    public List<Test> getTestList2(@PathVariable(name = "count") Integer count) {

        return testService.getTestList(count);
    }
 }

我得到错误:

Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'testController' method 
public java.util.List<models.Test> TestController.getTestList2(java.lang.Integer)
to {[],methods=[GET]}: There is already 'testController' bean method

如果我评论一种方法都可以正常工作

1 个答案:

答案 0 :(得分:0)

你所犯的错误是你告诉@GetMapping名称而不是它的价值,它可能会觉得它们的作用方式相同,但它有微小的差别。

  

RequestMapping.name :为此映射指定名称。

  

RequestMapping.value :此注释表示的主映射。在类型级别和方法级别支持!在类型级别使用时,所有方法级别的映射都会继承此主映射,将其缩小为特定的处理程序方法

@RestController
public class TestController {

     @GetMapping(value = "/test")
     public String testMethod() {
                return "Hello from test";
     }

     @GetMapping(value = "/test/{count}")
     public String testMethod(@PathVariable(value = "count") Integer count) {
                return "Hello from Parameterized Test. Count: " + count;
      }
}

因此,您正在指定控制器的路径或路径,因此始终优先指定value