SpringMVC Validate.md 2.2 KB

参考:Validated数据校验,看这一篇就够了_validated校验-CSDN博客 参考:@Validated和@Valid校验参数、级联属性、List - 简书 (jianshu.com)

校验集合

如果请求体直接传递了json数组给后台,并希望对数组中的每个元素对象都进行参数校验。此时,如果我们直接使用java.util.Collection下的list或者set并加上 @Validated 或 @Valid 来接收数据,参数校验并不会生效!如下这样:

//Controller接口
@PostMapping("batchAddUser)
public R batchAddUser(@ResponseBody @Validated List<User> userList) {
	//do something
}

**方法1:自定义集合类,如:


/**
 * 1、自定义List包装类,添加 @Valid 注解
 */
@Setter
@Getter
public class ValidList<E> implements List<E> {
	@Delegate 
	@Valid          // 一定要加@Valid注解
	private List<E> list = new LinkedList<>();
	/**
	 * @Delegate注解受lombok版本限制,1.18.6以上版本可支持。
	 * Lombok委托该字段类型(或方法的返回类型)的所有公共方法,以及其父类型的方法,但所有以`java.lang.Object`声明的方法除外
	 */
}

/**
 * 2、Controller接口,使用List包装类,并添加注解 @Validated
 */
@PostMapping("batchAddUser)
public R batchAddUser(@ResponseBody @Validated ValidList<User> userList) {
	//do something
}
			 
/**
 * 普通的校验User类
 */
public class User {
	@NotBlank(message="用户名不能为空")
	@Size(max=20, message="用户名不能超过20个字符")
	private String userName;
	@Min(value=0, message="年龄必须大于0")
	@Max(value=150, message="年龄不能超过150")
	private int age;
	@NotBlank(message="地址不能为空")
	@Size(max=255,message="地址长度不能超过255")
	private String address;

}

**方法2:Controller类上添加注解 @Validated

/**
 * 1、Controller类上添加注解 @Validated
 * 2、请求接口参数添加 @Valid 
 */
@Validated
@RequestMapping("/demo")
@RestController
public class DemoController {

	@PostMapping("batchAddUser)
	public R batchAddUser(@ResponseBody @Valid List<User> userList) {
		//do something
	}

}