• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何用Spring Rest Control解决模糊映射?

java 来源:Kartik 4次浏览

我已经看过以下职位如何用Spring Rest Control解决模糊映射?

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 

我知道这两种方法具有相同的签名,但他们有两个独特的终点。我该如何解决这个问题?


===========解决方案如下:

你的问题是,您所指定的终点是这样的:

@RequestMapping(name="/quiz/score/{id}", method=RequestMethod.GET) 
public Score getScore(@PathVariable("id") String quizId) { 
    return this.quizService.getScore(quizId); 
} 

但他们应该是这样的:

@RequestMapping(value="/quiz/score/{id}", method=RequestMethod.GET) 
public Score getScore(@PathVariable("id") String quizId) { 
    return this.quizService.getScore(quizId); 
} 

注意而不是

为了进一步说明,您可以检查RequestMapping javadoc,它解释了不同的参数。 name参数只是为您的映射提供了一个名称。 value参数是关键之一。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)