SpringBoot系列18-validation分组校验+自定义参数校验器
- [原文链接: https://www.lskyf.com/post/212](https://www.lskyf.com/post/212)
- 分组-加入依赖
- 分组-定义分组接口,均为空接口
- 分组-UserBean.java
- 分组测试代码-GroupController.java
- 自定义校验器-新增CustomUseGroup.java接口
- 自定义校验器-StatusConstraintValidator.java
- 自定义校验器-定义自定义注解Status(可以参照@NotNull注解)
- 自定义校验器-新建默认消息提示文件配置
- 自定义校验器-UserBean.java新增如下代码
- 自定义校验器-测试GroupController.java代码
- JSR303注解使用场景列表
- 小技巧:常用消息提示可参照源码ValidationMessages_zh_CN.properties查看
原文链接: https://www.lskyf.com/post/212
分组-加入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
分组-定义分组接口,均为空接口
public interface AddUserGroup {
}
public interface UpdateUseGroup {
}
分组-UserBean.java
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserBean {
public static final int ONLINE=1;
public static final int OFFLINE=-1;
public static final int LEAVE=2;
public static final int BUSY=3;
@NotNull(message = "不能为空",groups = {UpdateUseGroup.class})
private Long id;
@NotNull(message = "不能为空",groups = {AddUserGroup.class})
private String name;
@NotNull(message = "不能为空",groups = {AddUserGroup.class,UpdateUseGroup.class})
private Integer age;
}
分组测试代码-GroupController.java
@RestController
public class GroupController {
@GetMapping("/invalid")
public UserBean invalid(@Validated UserBean user){
return user;
}
@GetMapping("/add")
public UserBean userAdd(@Validated(AddUserGroup.class) UserBean user){
return user;
}
}
自定义校验器-新增CustomUseGroup.java接口
public interface CustomUseGroup {
}
自定义校验器-StatusConstraintValidator.java
public class StatusConstraintValidator implements ConstraintValidator<Status,Integer> {
Set<Integer> set=new HashSet<>();
@Override
public void initialize(Status annotation) {
int[] values = annotation.values();
for (int v:values) {
if (!set.contains(v)){
set.add(v);
}
}
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return set.contains(value);
}
}
自定义校验器-定义自定义注解Status(可以参照@NotNull注解)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { StatusConstraintValidator.class})
public @interface Status {
String message() default "{com.yuanfenge.valid.group.custom.Status.error}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int [] values() default { };
}
自定义校验器-新建默认消息提示文件配置
resources下新建ValidationMessages.properties
com.yuanfenge.valid.group.custom.Status.error=状态错误
自定义校验器-UserBean.java新增如下代码
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserBean {
@Status(values={ONLINE,OFFLINE,LEAVE,BUSY},groups = {CustomUseGroup.class})
private Integer status;
}
自定义校验器-测试GroupController.java代码
@RestController
public class GroupController {
@GetMapping("/customValid")
public UserBean customizeValid(@Validated(CustomUseGroup.class) UserBean user){
return user;
}
}
JSR303注解使用场景列表
注解 | 使用场景 |
---|
AssertFalse | 只能为false |
AssertTrue | 只能为true |
DecimalMax | 必须小于${inclusive == true ? ‘或等于’ : ‘’}{value} |
DecimalMin | 必须大于${inclusive == true ? ‘或等于’ : ‘’}{value} |
Digits | 数字的值允许范围(只允许在{integer}位整数和{fraction}位小数范围内) |
Email | 一个合法的电子邮件地址 |
Future | 需要是一个将来的时间 |
FutureOrPresent | 需要是一个将来或现在的时间 |
Max | 最大不能超过{value} |
Min | 最小不能小于{value} |
Negative | 必须是负数 |
NegativeOrZero | 必须是负数或零 |
NotBlank | 不能为空 |
NotEmpty | 不能为空 |
NotNull | 不能为null |
Null | 必须为null |
Past | 需要是一个过去的时间 |
PastOrPresent | 需要是一个过去或现在的时间 |
Pattern | 需要匹配正则表达式"{regexp}" |
Positive | 必须是正数 |
PositiveOrZero | 必须是正数或零 |
Size | 个数必须在{min}和{max}之间 |
小技巧:常用消息提示可参照源码ValidationMessages_zh_CN.properties查看
源码下载链接
原文链接: https://www.lskyf.com/post/212
作者:猿份哥,版权所有,欢迎保留原文链接进行转载:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)