当前位置: 首页 > 知识库问答 >
问题:

Spring引导歧义处理程序

戚俊健
2023-03-14

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

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

@RequestMapping(value = "/user/{username}", method = RequestMethod.GET)
public UserAppDto getNameByUsername(@PathVariable("username") String username) {
    return userService.getNameByUsername(username);
}

当我尝试登录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.controller.usercontroller.userappdto com.zenar.controller.getnamebyuserid(java.lang.long)}

那么需要修改URL吗?最新版本有什么修正吗?

共有1个答案

姚洲
2023-03-14

根据Spring MVC文档,当一个URL匹配多个模式时,将使用排序来查找最具体的匹配:

具有较低URI变量和通配符计数的模式被认为更具体。例如,/hotels/{hotel}/*有1个URI变量和1个通配符,被认为比/hotels/{hotel}/**更具体,后者为1个URI变量和2个通配符。

如果两个模式有相同的计数,较长的模式被认为更具体。例如,/foo/bar*/foo/*更长,而且被认为更具体。

@RequestMapping(value = "/user/{userId:\\d+}", method = RequestMethod.GET)
public UserAppDto getNameByUserId(@PathVariable("userId") Long userId) {
    return userService.getByUserId(userId);
}
 类似资料:
  • 我正在用Spring Boot开发一个rest应用程序。此应用程序有一个自定义筛选器,只允许在某些请求下访问。如果用户需要特定的资源,筛选器将抛出异常。如何在全局级别处理此筛选器中生成的所有异常? 我尝试了注释,但不起作用。

  • 我试图从thymeleaf输入到我的java类中获取一个值。 错误信息 我的应用程序是用Springboot、Java和Thymeleaf创建的。我做错了什么?ModelandView是否可能不能使用PostMapping?我还按照https://spring.io/guides/gs/handling-form-submission/进行了操作,但当我试图遵循逻辑并在项目中实现时,该示例就开始工

  • 我已经编写了一个测试服务,它只需要一个文件标题作为参数,即testfile。jpg。。所有这一切都是在抛出带有自定义异常消息的自定义异常。当我使用“testfile”作为参数时,它工作得很好。。给出400个错误状态代码。如果我使用“测试文件”。它似乎不喜欢那里的扩展,错误状态代码返回为500内部错误。 有人知道我能做些什么来解决这个问题吗?所以当使用扩展名为testfile.jpg的文件时,它会显

  • 我试图使用mockito在scala中模拟,如下所示 会有什么问题?

  • 我正在使用带有thymeleaf的Spring Boot,我所有的资源都在Spring应用程序之外的路径上,例如。在dev env上应该使用url解析路径,并且live env继续路径。 为什么资源处理程序不处理这些类型的资源,但是如果我处理没有问题?我错过了什么吗? 编辑:如果是并且位置是url也没有被处理

  • 当然,如果我给IntelliJ添加更多上下文,比如: 这是正确的,但在Java10 var推断类型上下文中,这是错误的: 我理解编译器不能推断的输入类型。如果我写: 编译器的错误更加不可读(但包含更多关于推理失败原因的提示),如下所示: