我目前正在处理一个现有项目(Java版本:1.7.0,使用Spring MVC框架版本:3.1.4),我们只在特定控制器类的一个URI中发现了
PathVariable
问题。如果您已经遇到过这个错误并且知道如何修复/解决它,我将不胜感激。谢谢!
代码(Java控制器类的提取部分):@RequestMapping(value = "/site/apps/{question}.json", method = RequestMethod.GET)
public @ResponseBody ServiceResponse moreUsers(
@PathVariable("question") final Question question,
@RequestParam(value = "sort", required = false) final String sort,
final HttpServletRequest request, final Model model)
错误输出我们的Tomcat日志(catalina.out文件):
ERROR Error executing request: /site/apps/52440.json
org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public com.project.infrastructure.service.ServiceResponse com.project.plugins.controllers.SiteAppController.moreUsers(com.project.models.node.Question,java.lang.String,javax.servlet.http.HttpServletRequest,org.springframework.ui.Model)]; nested exception is java.lang.IllegalStateException: **Could not find @PathVariable [question] in @RequestMapping**
我们已经研究过的内容:
- 根据规范文档(mvc-ann-requestmapping-uri-templates),遵循了spring约定来使用PathVariable注释,
- 在Java项目中没有找到其他类似的路径,可能会与(/site/apps/{question-id})产生冲突,
- 我们也记录了映射关系,并且根据值(位于此处:https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java#L755-L764)看起来很好。
- 有趣的事情发生在调用resolvePathVariable spring方法时,因为“URI模板变量映射”值为null(https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java#L853-L854),但不知道原因!
Question
? - undefined@PathVariable
应该是一个String
,而不是一个Question
。 - undefined