Kar*_*tik 2 java rest spring-mvc spring-boot
I have looked at the following posts
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
But I have not been able to figure out how to resolve my issue. I am creating a Spring Boot web application in which I am trying to map the following endpoints /quiz/score/{quizId} and /quiz/questions/{quizId} endpoints to two separate methods.
My functions are as follows
@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);
}
Run Code Online (Sandbox Code Playgroud)
and
@RequestMapping(name="/quiz/score/{id}", method=RequestMethod.GET)
public Score getScore(@PathVariable("id") String quizId) {
return this.quizService.getScore(quizId);
}
Run Code Online (Sandbox Code Playgroud)
I am getting the following error
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
Run Code Online (Sandbox Code Playgroud)
I know that two methods have the same signature, but they have two unique endpoints. How can I resolve this issue?
Your problem is that you've specified your endpoints like this:
@RequestMapping(name="/quiz/score/{id}", method=RequestMethod.GET)
public Score getScore(@PathVariable("id") String quizId) {
return this.quizService.getScore(quizId);
}
Run Code Online (Sandbox Code Playgroud)
But they should be like this:
@RequestMapping(value="/quiz/score/{id}", method=RequestMethod.GET)
public Score getScore(@PathVariable("id") String quizId) {
return this.quizService.getScore(quizId);
}
Run Code Online (Sandbox Code Playgroud)
Note the value instead of name.
For further clarification, you can check RequestMapping javadoc, which explains the different parameters. name parameter just gives a name for your mapping. The value parameter is the key one.
| 归档时间: |
|
| 查看次数: |
5597 次 |
| 最近记录: |