【问题标题】:Usage of @RequestParam throws error in Spring 3在 Spring 3 中使用 @RequestParam 会引发错误
【发布时间】:2011-09-20 11:52:52
【问题描述】:

我正在使用@RequestParam 注释来获取请求参数,并使用它来将值插入到数据库中。 我已将控制器设置为重定向到同一页面,该页面包含供用户输入值的文本字段,这些值正在使用 @RequestParam 注释读取。

但是在我在文本字段中输入值并单击提交后,它会抛出此错误

请求处理失败;嵌套异常是 java.lang.IllegalArgumentException:参数类型 [java.lang.String] 的名称不可用,并且在类文件中也找不到参数名称信息。

我是 Spring 3 的新手,无法理解错误。任何人都可以阐明这一点。

提前致谢, 维韦克

【问题讨论】:

  • 哪个版本的 Spring MVC?你能用注释显示方法的签名吗?
  • 我使用的是Spring MVC version 3,方法签名是public void insertRecords(@RequestParam String id , @RequestParam String name , @RequestParam String addr)

标签: spring annotations


【解决方案1】:

为了将请求参数的值注入到您的处理程序方法参数中,应满足以下任一条件

  1. 请求参数的名称必须与方法参数的名称匹配。 例如 下面会将名为“studentName”的请求参数注入到方法参数studentName中

    public String goToStep(@RequestParam String studentName)

  2. 如果请求参数名称与方法参数不匹配,则必须显式指定。下面将“nameOfStudent”请求参数注入到studentName中:

    public String goToStep(@RequestParam("nameOfStudent") String studentName)

如果您的问题仍然存在,请发布您的处理程序方法代码。

【讨论】:

  • 我遵循了概述的指南,因此所有参数名称都是正确的。请在下面找到处理程序方法代码。 public void insertRecords(@RequestParam String id , @RequestParam String name , @RequestParam String addr) 和对应的jsp根据方法参数的命名约定,对每个文本字段都有id属性。
  • 检查请求参数是否可以从servlet层访问。像这样:code public void insertRecords(@RequestParam String id , @RequestParam String name , @RequestParam String addr, HttpServletRequest request) { System.out.println( request.getParameter( "name" ) ); // 不要在生产中使用 } code 如果这打印“null”,那么 JSP 没有发送参数并且发布您的相关 JSP 代码将很有用。如果它打印出您期望的值,那么我们知道问题出在控制器上。
【解决方案2】:

我询问了您正在使用的版本,因为几天前我遇到了类似的问题。我使用的是 Spring 3.1.0.M2,当我在代理 @Controller 中使用 @PathVariable 时出现了同样的异常。

这是由resolved known bug 引起的。您只需切换到 3.0.6 或尝试夜间构建 3.1.0.BUILD-SNAPSHOT。当然,生产环境不推荐使用后者。

【讨论】:

  • wwwoooowwwww....我会检查一下并在此处更新空格键.. 感谢您提供的信息... :)
  • 非常感谢!我一直在寻找这个晦涩的错误,如果不是你的帖子,我会花很多时间来解决它:)
  • 我是 Spring 新手,不知道如何包含 3.0.6 或 3.1.0.BUILD-SNAPSHOT。我正在使用弹簧 mvc。切换到此的确切依赖项/过程是什么?谢谢@sinuhepop
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
相关资源
最近更新 更多