版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenbetter1996/article/details/83796448
接收普通请求参数
1. 参数列表法
如果传递过来的参数的名称和HTTP的保持一致,可以无需任何注解地获取参数
@RequestMapping(value = "/register")
public ModelAndView register(String phone, String password, byte roleType) {
log.info("phone: " + phone);
...
...
return mv;
}
如果请求是GET, url = xxx/register?phone=123&password=55&roleType=1
或者POST请求,只要HTTP请求参数名称和控制器参数名称保持一直就可以映射获取到值。
如果参数不一致是没法映射成功获取到的,但是这种方式允许获取不到,即允许参数为空,而不抛出异常
2. POJO映射法
如果要传的参数很多,那么控制器的参数列表就很麻烦,这时可以考虑使用新建一个POJO来管理这些参数,**在没有任何注解的情况下,Spring MVC也是有映射POJO的能力的。
public class User {
private int id;
private String phone;
private String password;
private byte roleType;
/** setter and getter **/
}
有了这个POJO,如果HTTP请求的参数不变,那么以上控制器的参数列表可以改为
@RequestMapping(value = "/register")
public ModelAndView register(User user) {
log.info("phone: " + user.getPhone());
...
...
return mv;
}
也是需要HTTP请求的参数和控制器的参数POJO的属性名一直,如果不一致也不会报错异常,但是无法赋值,即为初始化默认值,比如id字段,user.getId() = 0 (默认是0)
使用@RequestParam注解获取参数
使用这个方法可以有效解决HTTP请求的参数和控制器参数名称不一致的情况 ,默认不允许为空,为空会报错异常
// value的值是HTTP的参数名称,String phone的phone是控制器的参数名称
// 改为false, 可以为空不报错
@RequestParam(value = "phone", required = false) String phone, ...
// 默认如果参数名称一直,可以省略注解的属性
@RequestParam String phone, ...