【发布时间】:2018-05-16 22:16:57
【问题描述】:
我看过以下帖子
1) Error creating bean with name 'requestMappingHandlerAdapter'
2)Spring Boot Ambiguous mapping. Cannot map method
3)Spring mvc Ambiguous mapping found. Cannot map controller bean method
4) Spring MVC Ambiguous mapping. Cannot map
但我无法弄清楚如何解决我的问题。我正在创建一个 Spring Boot Web 应用程序,我在其中尝试将以下端点 /quiz/score/{quizId} 和 /quiz/questions/{quizId} 端点映射到两个单独的方法。
我的功能如下
@RequestMapping(name="/quiz/questions/{quizId}", method=RequestMethod.GET)
public ResponseEntity<QuizQuestion> questions(@PathVariable String quizId) {
QuizQuestion question = this.quizService.fetchQuestion(quizId);
if (question == null) {
return new ResponseEntity<QuizQuestion>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<QuizQuestion>(question, HttpStatus.OK);
}
和
@RequestMapping(name="/quiz/score/{id}", method=RequestMethod.GET)
public Score getScore(@PathVariable("id") String quizId) {
return this.quizService.getScore(quizId);
}
我收到以下错误
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map '/myapplication' method
public com.project.myapplication.Score com.project.myapplication.QuizController.getScore(java.lang.String)
to {[],methods=[GET]}: There is already '/myapplication' bean method
public org.springframework.http.ResponseEntity<com.project.myapplication.QuizQuestion> com.project.myapplication.QuizController.questions(java.lang.String) mapped.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
. . . . . . . .. .
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map '/myapplication' method
public com.project.myapplication.Score com.project.myapplication.QuizController.getScore(java.lang.String)
to {[],methods=[GET]}: There is already '/myapplication' bean method
public org.springframework.http.ResponseEntity<com.project.myapplication.QuizQuestion> com.project.myapplication.QuizController.questions(java.lang.String) mapped.
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.assertUniqueMethodMapping(AbstractHandlerMethodMapping.java:576) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at
我知道两个方法具有相同的签名,但它们有两个唯一的端点。我该如何解决这个问题?
【问题讨论】:
-
你能显示我的应用程序端点吗?
-
无关注意:您的两个方法实际上没有相同的签名,只是相同的参数。对于相同的签名,它们需要以相同的名称命名,但事实并非如此。方法名称及其参数类型定义了方法签名。
标签: java rest spring-mvc spring-boot