究竟什么是@RequestParam以及它是如何填充的?

Spring文档说:

使用@RequestParam批注将请求参数绑定到控制器中的方法参数。

来源: http : //static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestparam

AFAIK,如果请求方法是GET,则请求参数是从查询字符串中检索的变量。 它们也是请求方法POST时从表单值检索的变量。 我已经使用一个简单的JSPvalidation了这一点,该JSP通过方法request.getParameter(“key”)显示请求参数。

但在我看来,@ RequestParam仅适用于GET方法请求。 它只能从查询字符串中获取值。

这是文档中的错误吗? 有人可以引用一些文档来描述@RequestParam用于什么,它不能用于什么,以及它是如何填充的?

我可以使用@RequestParam for POST方法来获取表单值吗? 如果我不能使用@RequestParam,我还能使用什么? 我试图避免调用request.getParameter(“key”)。

它也适用于post。 你可以发布你的方法体和你的HTML吗?

是的,它也适用于post方法。 你可以提到@RequestParam的method属性作为RequestMethod=POST 。 这是代码片段

 @RequestMapping(value="/register",method = RequestMethod.POST) public void doRegister ( @RequestParam("fname") String firstName, @RequestParam("lname")String lastName, @RequestParam("email")String email, @RequestParam("password")String password ) 

您可以使用@ModelAttribute注释并绑定到整个对象,而不是绑定到单个表单值的@RequestParam 。 但它应该与form一起使用或bind Spring的JSTL。

示例: – 调用JSP-page的控制器,它应该将对象添加到Model:

 @RequestMapping(value="/uploadForm", method=RequestMethod.GET) 

public String showUploadForm(Model model){

 Artist artist = new Artist(); Track track = new Track(); model.addAttribute("artist", artist); model.addAttribute("track", track); return "uploadForm"; 

}

  • JSP可能看起来像这样:

曲目标题*:

  • 处理表单提交的控制器;

    @RequestMapping(value =“/ uploadToServer”,method = RequestMethod.POST)

    public String uploadToServer(@ModelAttribute(“artist”)艺术家艺术家,@ ModelAttribute(“track”)Track track){….}

在这里,我找到了使用@ModelAttribute注释的一个很好的解释 – krams915.blogspot.ca