JSR 303学习 自定义校验(完结)
1 编写自定义的校验注解
参考已有的 校验注解
加依赖
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency>
编写自定义校验注解
package com.atguigu.common.valid; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Documented //指定校验器 @Constraint( validatedBy = {} ) //校验注解可以标注在哪些位置 @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) //可以在运行时获取到 @Retention(RetentionPolicy.RUNTIME) public @interface ListValue { String message() default "{com.atguigu.common.valid.ListValue.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; int [] vals() default { }; }
写入message信息
实体类上加上 自定义注解
2 编写自定义的校验器
package com.atguigu.common.valid; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> { private Set<Integer> set=new HashSet<>(); //初始化方式 获取初始化 传入的校验规则的值 @Override public void initialize(ListValue constraintAnnotation) { int[] vals= constraintAnnotation.vals(); for (int val: vals) { set.add(val); } } /** * 判断是否校验成功 * @param integer 前端给我们传入的值 * @param constraintValidatorContext * @return */ @Override public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) { return set.contains(integer); } }
注意点
3 关联自定义校验器 和 校验注解
4 测试
如果在注解里写入 message 信息 注解里的message 信息出的优先级 大于ValidationMessages.properties 里的
本文作者:KwFruit
本文链接:https://www.cnblogs.com/mangoubiubiu/p/14427660.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
JSR303
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步