疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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


 

 
SpringMVC获取参数的方式非常灵活,这里总结四种方式:
1.方法参数以直接量方式接收
 
表单
<form action="simple/test1" method="get">
    <input name="userName"/>
    <button type="submit">提交</button>
</form>
复制代码
 
Java代码
@RequestMapping(value = "test1", method = RequestMethod.GET)
public String test1(@RequestParam("userName") String name) {
    System.out.println("GET方法的请求:" + name);
    return "abc";
}
复制代码
 
2.自动转换为Java对象
 
表单
<form action="simple/login" method="post">
    用户名:<input name="userName"/><br/>
    密码:<input type="password" name="password"/><br/>
    <button type="submit">提交</button>
</form>
复制代码
 
Java代码
@RequestMapping(method = RequestMethod.POST)
public String test(User user) {
    System.out.println(user);
    return "user";
}
复制代码
 
这里需要注意的是:如果表单的输入框有前缀的化,需要利用@InitBinder和@ModelAttribute注解的配合!
表单
<form action="simple/login/2" method="post">
    用户名:<input name="user.userName"/><br/>
    密码:<input type="password" name="user.password"/><br/>
 
    <button type="submit">提交</button>
</form>
复制代码
 
Java代码
// xxx 一般跟前缀相对应
@InitBinder("xxx")
public void user(WebDataBinder binder) {
    // 设置User对象的请求参数的前缀
    // user.则需要跟表单里面的前缀对应
    binder.setFieldDefaultPrefix("user.");
}
 
// xxx是两个方法保持一致的
// @ModelAttribute("xxx")里面的xxx对应到@InitBinder里面的值
@RequestMapping(value = "2", method = RequestMethod.POST)
public String test2(@ModelAttribute("xxx") User user) {
    System.out.println(user);
    return "user";
}
复制代码
 
3.使用WebRequest提供的getParamenter方法获取,不推荐
@RequestMapping(value = "test1", method = RequestMethod.POST)
public String test2(WebRequest request) {
    String name = request.getParameter("userName");
    System.out.println("POST方法的请求:" + name);
    return "abc";
}
复制代码
 
虽然本方法不推荐使用,但偶然还是有可能要用到,比如在参数名称或者参数类型不确定的时候。WebRequest是Spring为了让程序和Servlet API解耦合而设计的一个接口,能够实现跟HttpServletRequest差不多的功能。
 
4.使用HttpServletRequest的getParameter方法获取,强烈不推荐
@RequestMapping(value = "test1", method = RequestMethod.POST)
public String test2(HttpServletRequest request) {
    String name = request.getParameter("userName");
    System.out.println("POST方法的请求:" + name);
    return "abc";
}
复制代码