| # 实体类 |
| # 所有的属性都是默认分组 |
| public class UserInfo { |
| |
| public interface Add{ |
| |
| } |
| public interface Update{ |
| |
| } |
| |
| |
| @Null(groups = {Add.class}) |
| @NotNull(groups = Update.class) |
| private Long id; |
| |
| } |
| |
| # 传入参数groups |
| public class ValidationUtil { |
| |
| private static Validator validator; |
| |
| static { |
| validator = Validation.buildDefaultValidatorFactory().getValidator(); |
| } |
| |
| public static List<String> valid(UserInfo userInfo, Class<?>... groups){ |
| |
| Set<ConstraintViolation<UserInfo>> set = validator.validate(userInfo,groups); |
| List<String> list = set.stream().map(v -> "属性:" + v.getPropertyPath() + |
| ",属性的值:" |
| + v.getInvalidValue() + ",校验不通过的提示信息:" + v.getMessage()) |
| .collect(Collectors.toList()); |
| return list; |
| } |
| |
| } |
| |
| # 测试 |
| public class ValidationTest { |
| public static void main(String[] args) { |
| UserInfo userInfo = new UserInfo(); |
| userInfo.setName("zhaodaowen"); |
| userInfo.setAge(18); |
| userInfo.setEmail("2025186764@qq.com"); |
| userInfo.setPhone("13312345678"); |
| userInfo.setBirthDay(LocalDateTime.now().minusDays(1)); |
| userInfo.setPersonalPage("http://www.roadjava.com"); |
| |
| List<String> list = ValidationUtil.valid(userInfo,UserInfo.Add.class,Default.class); |
| System.out.print(list); |
| } |
| } |
| # 第1个实体类 |
| public class Grade { |
| @NotBlank |
| private String no; |
| |
| public String getNo() { |
| return no; |
| } |
| |
| public void setNo(String no) { |
| this.no = no; |
| } |
| } |
| |
| # 第2个实体类 |
| public class UserInfo { |
| |
| @NotNull |
| @Valid |
| private Grade grade; |
| |
| public Grade getGrade() { |
| return grade; |
| } |
| |
| public void setGrade(Grade grade) { |
| this.grade = grade; |
| } |
| } |
| @Documented |
| @Constraint(validatedBy = { UserStatusValidator.class}) |
| @Target({ FIELD}) |
| @Retention(RUNTIME) |
| public @interface UserStatus { |
| |
| String message() default "status必须是1000/1001/1002"; |
| |
| Class<?>[] groups() default { }; |
| |
| Class<? extends Payload>[] payload() default { }; |
| } |
| |
| public class UserStatusValidator implements ConstraintValidator<UserStatus, Integer> { |
| @Override |
| public void initialize(UserStatus constraintAnnotation) { |
| } |
| |
| @Override |
| public boolean isValid(Integer value, ConstraintValidatorContext context) { |
| if ( value == null ) { |
| return true; |
| } |
| Set<Integer> set = new HashSet<>(); |
| set.add(1000); |
| set.add(1001); |
| set.add(1002); |
| return set.contains(value); |
| } |
| } |
| |
| # 测试 |
| public class UserInfo { |
| @UserStatus |
| private Integer status; |
| |
| public Integer getStatus() { |
| return status; |
| } |
| |
| public void setStatus(Integer status) { |
| this.status = status; |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下