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

Spring Boot中的处理程序方法不明确

党星鹏
2023-03-14

在我的Spring Boot应用程序中有以下两个getMapping方法:

@GetMapping("/user/{id}")
User one(@PathVariable Long id) {
    return repository.findById(id)
            .orElseThrow(() -> new UserNotFoundException(id));
}



@GetMapping("/user/{uid}")
User one(@PathVariable String uid) {
    return repository.findByDisplayName(uid);
            //.orElseThrow(() -> new UserNotFoundException(id));
}

我想通过userid(自动生成)或uniqueuserid(字符串,如果可用的话)来getmapping

java.lang.IllegalStateException:映射到“/user/dis1”的处理程序方法不明确:{com.mua.cse616.model.user com.mua.cse616.controller.usercontroller.one(java.lang.long),com.mua.cse616.controller.usercontroller.one(java.lang.string)}

如何解决这个问题?

共有1个答案

刘胜泫
2023-03-14

您必须为其中一个映射设置另一个名称。
当控制器接收/user/1234时,它无法猜测1234必须解析为字符串还是长字符串,因此它无法选择必须调用哪个方法。
这就是为什么相同的模式不能用于不同的GET方法的原因。如果您有postmappinggetmapping,您可以重用该模式,但在您的情况下,这不是最干净的解决方案。

@GetMapping("/user/{id}")
User one(@PathVariable Long id) {
    return repository.findById(id)
            .orElseThrow(() -> new UserNotFoundException(id));
}


// Mapping changed to handle calls like /user/uid/2345-ABCD-5678
@GetMapping("/user/uid/{uid}")
User one(@PathVariable String uid) {
    return repository.findByDisplayName(uid);
            //.orElseThrow(() -> new UserNotFoundException(id));
}
 类似资料:
  • 我用Java编写REST api,并使用Groovy和Spock进行测试。

  • 我有一个Spring应用程序,在其中我声明了我的类,如下所示: 但是当我试图到达其中一个restendpoint时,我得到一个错误:并且它指定这两个方法为问题。我的印象是,如果我更改了请求参数,Spring不会通过以下帖子抱怨它们是相同的:http://www.coderanch.com/t/598675/Spring/handling-http-request-parameters但显然它仍然如

  • 我正在使用JBoss6.1、Spring3.2、hibernate验证以及最近启用的CORS支持。请求与GET方法配合良好。如果使用请求方法POST,我希望控制器返回405。但我得到的是http状态码400。我在jboss日志中启用了跟踪,发现spring返回了错误的处理程序。应用程序只有一个控制器接受POST请求方法,其余控制器定义为只接受GET方法。每当使用POST请求方法对这些控制器(用GE

  • ValidationExceptionHandler.java 当我运行我的代码并传递无效的电子邮件地址时,我会得到以下异常。从不执行HandleConstraintVilvation中的代码。异常中返回的http状态是500,但我想返回400。你知道我怎么才能做到吗?

  • 我有一个带post请求的控制器。我试图用一个简单的NotNull注释验证POJO。我正在使用ControllerAdvice来处理异常。 所以我尝试使用它,但当我启动应用程序时,我得到了以下信息: 因此,我想为BindException创建自己的处理程序,但当我为BindException类创建ExceptionHandler时,spring应用程序不会启动。如果我注释掉handleBindExc

  • 我正在为Spring MVC中的异常处理开发示例演示应用程序。我正在尝试使用@ControllerAdvice处理异常 我遵循了本链接中描述的步骤。 但是当我运行我的应用程序时,我得到了以下错误 以下是我正在学习的课程 应用程序异常。JAVA 控制器类 ApplicationExceptionController。JAVA 下面是GlobalExceptionHandler类 GlobalExce