请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术发帖,必有回复! 做最受欢迎的Java论坛

疯狂Java联盟

 找回密码
 加入联盟
查看: 56|回复: 1

SpringMVC里面获取参数的4种方式

[复制链接]
发表于 2017-12-1 21:30:03 | 显示全部楼层 |阅读模式
SpringMVC获取参数的方式非常灵活,这里总结四种方式:
1.方法参数以直接量方式接收

表单
  1. <form action="simple/test1" method="get">
  2.     <input name="userName"/>
  3.     <button type="submit">提交</button>
  4. </form>
复制代码

Java代码
  1. @RequestMapping(value = "test1", method = RequestMethod.GET)
  2. public String test1(@RequestParam("userName") String name) {
  3.     System.out.println("GET方法的请求:" + name);
  4.     return "abc";
  5. }
复制代码

2.自动转换为Java对象

表单
  1. <form action="simple/login" method="post">
  2.     用户名:<input name="userName"/><br/>
  3.     密码:<input type="password" name="password"/><br/>
  4.     <button type="submit">提交</button>
  5. </form>
复制代码

Java代码
  1. @RequestMapping(method = RequestMethod.POST)
  2. public String test(User user) {
  3.     System.out.println(user);
  4.     return "user";
  5. }
复制代码

这里需要注意的是:如果表单的输入框有前缀的化,需要利用@InitBinder和@ModelAttribute注解的配合!

表单
  1. <form action="simple/login/2" method="post">
  2.     用户名:<input name="user.userName"/><br/>
  3.     密码:<input type="password" name="user.password"/><br/>
  4.     <button type="submit">提交</button>
  5. </form>
复制代码

Java代码
  1. // xxx 一般跟前缀相对应
  2. @InitBinder("xxx")
  3. public void user(WebDataBinder binder) {
  4.     // 设置User对象的请求参数的前缀
  5.     // user.则需要跟表单里面的前缀对应
  6.     binder.setFieldDefaultPrefix("user.");
  7. }

  8. // xxx是两个方法保持一致的
  9. // @ModelAttribute("xxx")里面的xxx对应到@InitBinder里面的值
  10. @RequestMapping(value = "2", method = RequestMethod.POST)
  11. public String test2(@ModelAttribute("xxx") User user) {
  12.     System.out.println(user);
  13.     return "user";
  14. }
复制代码

3.使用WebRequest提供的getParamenter方法获取,不推荐
  1. @RequestMapping(value = "test1", method = RequestMethod.POST)
  2. public String test2(WebRequest request) {
  3.     String name = request.getParameter("userName");
  4.     System.out.println("POST方法的请求:" + name);
  5.     return "abc";
  6. }
复制代码

虽然本方法不推荐使用,但偶然还是有可能要用到,比如在参数名称或者参数类型不确定的时候。WebRequest是Spring为了让程序和Servlet API解耦合而设计的一个接口,能够实现跟HttpServletRequest差不多的功能。

4.使用HttpServletRequest的getParameter方法获取,强烈不推荐
  1. @RequestMapping(value = "test1", method = RequestMethod.POST)
  2. public String test2(HttpServletRequest request) {
  3.     String name = request.getParameter("userName");
  4.     System.out.println("POST方法的请求:" + name);
  5.     return "abc";
  6. }
复制代码


发表于 2017-12-1 21:52:10 | 显示全部楼层
1. 现在Spring提供直接提供了@GetMapping和@PostMapping,不需要搞@RequestMapping这么复杂的东西。
2. 第二种方式也不需要搞这么复杂,直接搞个@ModelAttribute注解,Spring就可以封装成对象了。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

视频、代码、电子书下载
请关注"疯狂图书"公众号
QQ交流1群: 545923995  未满

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11063141号 )

GMT+8, 2017-12-18 20:45 , Processed in 0.326043 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表