Spring boot Ambiguous handler

时间:2016-05-02 12:26:43

标签: java spring spring-mvc spring-boot

我使用Spring Boot。我创建了这两个方法:

if (j != i) {
   #pragma omp atomic 
    outVec[j] += MAT->val[ckey] * inVec[i];
}

当我尝试登录Web应用程序时,我得到:

  

java.lang.IllegalStateException:映射的不明确的处理程序方法   HTTP路径“http://localhost:8080/rest/user/bsmith”:{public   com.zenar.dto.UserAppDto   com.zenar.controller.UserController.getNameByUsername(java.lang.String中),   public com.zenar.dto.UserAppDto   com.zenar.controller.UserController.getNameByUserId(java.lang.Long中)}

似乎,它无法对数据类型做出改变。

那么需要修改URL吗?最新版本中的任何修复?

1 个答案:

答案 0 :(得分:3)

根据Spring MVC documentation,当网址与多个模式匹配时,会使用排序来查找最具体的匹配

  

URI变量和通配符数量较少的模式是   考虑更具体。例如,/hotels/{hotel}/*有1个URI   变量和1张外卡并且被认为更具体   /hotels/{hotel}/**作为1个URI变量和2个通配符。

     

如果两个模式具有相同的计数,则更长的模式是   考虑更具体。例如,/foo/bar*更长   被认为比/foo/*更具体。

     

当两个模式具有相同的计数和长度时,模式具有   更少的外卡被认为更具体。例如   /hotels/{hotel}/hotels/*更具体。

应用这些规则后,当Spring MVC无法确定哪一个更具体时,它将抛出该异常。解决此问题的一种方法是使其中一个更具体

@RequestMapping(value = "/user/{userId:\\d+}", method = RequestMethod.GET)
public UserAppDto getNameByUserId(@PathVariable("userId") Long userId) {
    return userService.getByUserId(userId);
}