spring validation相关知识就不阐述,以下链接有详细阐述
本文主要写关于validation自定义校验
项目有个需求:实体类的某个属性 必须验证为指定值,比如0,1等
做法有2种:
1,使用validation @Pattern注解的正则表达式,本文主要讲自定义校验,在此就不多写。
2,自定义注解
一,第一步,创建自定义注解
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {EnumValueValidator.class})
public @interface EnumValue {
//默认错误消息
String message() default "必须为指定值";
String[] strValues() default {};
int[] intValues() default {};
//分组
Class<?>[] groups() default {};
//负载
Class<? extends Payload>[] payload() default {};
//指定多个时使用
@Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interface List {
EnumValue[] value();
}
}
strValues()和intValues()用于存注解上指定的值,
@Constraint注解上指定了EnumValueValidator类为具体实现类,
二,创建具体实现类EnumValueValidator,
public class EnumValueValidator implements ConstraintValidator< EnumValue, Object>{
private String[] strValues;
private int[] intValues;
@Override
public void initialize(EnumValue constraintAnnotation) {
strValues = constraintAnnotation.strValues();
intValues = constraintAnnotation.intValues();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context ) {
if(value instanceof String) {
for (String s:strValues) {
if(s.equals(value)){
return true;
}
}
}else if(value instanceof Integer){
for (int s:intValues) {
if(s == value.intValue()){
return true;
}
}
}
return false;
}
}
必须实现ConstraintValidator类,有2个方法initialize,isValid,
通过initialize方法获取注解上的值,通过isValid方法实现具体的验证,
isVali有2个入参Object value, ConstraintValidatorContext context,Object 为需要被验证的值。
编写完成后,自定义注解@EnumValue就可以在String和Integer类型的添加了
参考
最新评论
徒弟可以A师傅,学生可以A老师,为什么外包不能A正式,我觉得很正常。异性相吸这是宇宙真理
PHP天下第一(狗头叼花)
第一个不需要关注公主号直接给激活码的帖子!
客户端超时断开后,服务端如果没有设置超时机制,那也会继续等待处理,万一这期间有消息到了,那不是就接受到消息处理了,但是也没有办法返回到客户端,导致消息丢失。
企业级GO项目开发实战 Kubernetes权威指南 第六版
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk