Spring MVC控制器接收各类请求参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 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, ...

猜你喜欢

转载自blog.csdn.net/chenbetter1996/article/details/83796448