04.`validator`数据校验→`jsr303`
2020-09-05 本文已影响0人
风安峻_
1. 依赖
-
依赖
<dependencies> <!-- validator 数据校验 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> </dependencies>
-
spring boot
已经集成了validator
2. 常用注解
-
@Validated
和@Valid
-
@Validatesd
用于标记类
、方法
、形参
,用在形参
上无法提供嵌套验证
功能,须在形参
的成员变量上使用@Valid
注解来配合使用。 -
必须
在类上使用@Validated
注解标记才可以进行验证,否则所有验证
都不会生效
-
-
空
校验注解 修饰类型 说明 @Null
任何类型 校验对象必须为空 @NotNUll
任何类型 校验对象不为空,不能校验空字符串 @NotBlank
字符串 字符串不能为空串 @NotEmpty
字符串、集合、数组 字符串不能为空串、数组集合长度不为0 -
boolean
校验注解 修饰类型 说明 @AssertFalse
boolean 校验 boolean
类型必须为false
@AssertTrue
boolean 校验 boolean
类型必须为true
-
日期
校验注解 修饰类型 说明 @Past
日期 校验的日期对象必须是一个 过去的
时间@Future
日期 校验的日期对象必须是一个 未来的
时间 -
数值
校验注解 修饰类型 说明 @Min
数值 校验的 数字
的值必须≥
指定的值@Max
数值 校验的 数字
的值必须≤
指定的值DecimalMin(value = "", inclusive = true)
数值 inclusive
为true
时校验的数字要≥
,为false
时要>
@DecimalMax(value = "", inclusive = true)
数值 inclusive
为true
时校验的数字要≤
,为false
时要<
@Digits(integer =, fraction =)
小数 integer
指定整数精度
,fraction
指定小数精度
Length(min = , max = )
字符串 字符串的长度在 min
跟max
之间@Size(min = , max = )
字符串 字符串的长度在 min
跟max
之间@Range(min = , max = )
数值 校验的 数字
的值要在min
跟max
之间 -
特殊
校验注解 修饰类型 说明 @CreditCardNumber
字符串 校验的字符串为 信用卡
类型@URL
字符串 校验的字符串为 URL
地址@Email(regexp = "正则")
字符串 校验的字符串为 email
邮箱格式@Pattern(regexp = "正则")
字符串 校验的字符串是否匹配 正则
3. 栗子
-
栗子1
-
controller
@Validated @RestController @RequestMapping("/test") public class TestController { @PostMapping("/test") public ResultBean<Object> test(@Validated @RequestBody UserDto userDto) { return null; } }
-
javabean
-
UserDto
-校验参数@Data @Validated public class UserDto implements Serializable { @NotEmpty(message = "用户名不能为空") private String userName; @Pattern(regexp = "^1[3-9][0-9]{9}$", message = "请输入正确的手机号") private String userPhone; @Email(regexp = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message = "请正确输入邮箱") private String userEmail; @Range(min = 1, max = 150, message = "年龄必须在1~150之间") private Integer userAge; @Past(message = "生日必须是过去的时间") private Date userBirthday; @Valid @NotEmpty(message = "地址不能为空") private List<Address> address; }
-
Address
-被嵌套的元素@Data @Validated public class Address implements Serializable { @NotEmpty private String province; @NotEmpty private String city; @NotEmpty private String area; private String address; }
-
-
-
栗子2
@Validated @RestController @RequestMapping("/login") public class LoginController { /** * 根据邮箱进行注册 * * @param email 邮箱 * @param password 密码 * @param confirmPassword 确认密码 * @return 封装了信息的 JavaBean */ @PostMapping("/registerByEmail") public ResultBean<Integer> registerByEmail(@Email(regexp = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message = "请正确输入邮箱") @RequestParam String email, @Pattern(regexp = "[A-Za-z0-9]{6,18}", message = "密码应该由6-18位的数字或字母组成") @RequestParam String password, @Pattern(regexp = "[A-Za-z0-9]{6,18}", message = "两次密码不一致") @RequestParam String confirmPassword) { int result = customerService.save(email, password, confirmPassword); // 判断是否成功 return result > 0 ? ResultBean.success(StatusCodeEnum.SUCCESS, result) : ResultBean.error(StatusCodeEnum.REGISTER_ERROR, result); } }