【问题标题】:java.lang.IllegalStateException: Could not find @PathVariablejava.lang.IllegalStateException:找不到@PathVariable
【发布时间】:2016-10-22 06:13:32
【问题描述】:

我目前正在处理一个现有项目(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**

我们已经研究过的内容:

【问题讨论】:

  • 有没有类似的url格式?为什么你的参数类型是Question
  • @PathVariable 应该是 String,而不是 Question
  • 不,没有任何类似的 url 模式,这个项目没有重复的 URI。它最初是通过使用自定义 Question 对象进行编码的,该对象包含和 id 字段。但是,为了确保这个问题与此无关,我已经通过用 Long 对象替换 Question 对象进行了测试,甚至还使用了 long 原语
  • 根据 spring doc (docs.spring.io/spring/docs/current/spring-framework-reference/…),@PathVariable 参数可以是任何简单类型,例如 int、long、Date 等。Spring 自动转换为适当的类型或抛出 TypeMismatchException 如果它没有这样做。
  • 您是否已将 添加到您的 dispatcherServlet 中? @HernanA

标签: java spring spring-mvc servlets request-uri


【解决方案1】:

在您的方法处理程序中尝试使用 {question} pathVariable 作为 int,假设您的 Question JavaBean 中有 int questionid 字段并尝试在方法处理程序内构造 Question JavaBean..

@RequestMapping(value = "/site/apps/{question}.json", method = RequestMethod.GET)
public @ResponseBody ServiceResponse moreUsers(
        @PathVariable("question") Integer question,
        @RequestParam(value = "sort", required = false) final String sort,
        final HttpServletRequest request, final Model model){

Question Q=questionservice.getQuestion(question);

}

【讨论】:

  • 正如我上面提到的,我没有尝试过使用整数,但我已经通过用 Long 对象替换 Question 对象进行了测试,甚至还使用了 long 原语。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
相关资源
最近更新 更多