SpringBoot⾃定义校验注解校验⽇期时间格式字符串
1 概述
后台单独对接收到的参数进⾏验证时⽐较⿇烦,springboot项⽬的web组件(spring-boot-starter-web)集成了hibernate-validator,开发者可以直接使⽤hibernate-validator提供的注解对数据进⾏校验,当有⼀些复杂的参数校验时我们也可以⾃定义校验注解
2、先定义⼀个注解
package com.ideatech.ams.ws.validate;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = DateTimeValidator.class)
public @interface DateTimeStr {
String message() default "{ssage}";
String format() default "yyyy-MM-dd HH:mm:ss";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@Constraint,指定校验类
message,失败提⽰信息
groups,分组验证(后⾯介绍)
payload,不知道,欢迎留⾔探讨
2、编写校验类
package com.ideatech.ams.ws.validate;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.annotation.Annotation;
SimpleDateFormat;
public class DateTimeValidator implements ConstraintValidator<DateTimeStr,String>{
java时间日期格式转换private  DateTimeStr  dateTimeStr;
@Override
public void initialize(DateTimeStr dateTimeStr) {
this.dateTimeStr=dateTimeStr;
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 如果 value 为空则不进⾏格式验证,为空验证可以使⽤ @NotBlank @NotNull @NotEmpty 等注解来进⾏控制,职责分离
if (value == null) {
return true;
}
String format = dateTimeStr.format();
if (value.length() != format.length()) {
return false;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
try {
simpleDateFormat.parse(value);
} catch (Exception e){
return false;
}
return true;
}
}
1:必须实现ConstraintValidator接⼝
2:实现了ConstraintValidator接⼝后即使不进⾏Bean配置,spring也会将这个类进⾏Bean管理
3:可以在实现了ConstraintValidator接⼝的类中依赖注⼊其它Bean
4:实现了ConstraintValidator接⼝后必须重写 initialize 和 isValid 这两个⽅法;initialize⽅法主要来进⾏初始化,通常⽤来获取⾃定义注解的属性值;isValid ⽅法主要进⾏校验逻辑,返回true表⽰校验通过,返回false表⽰校验失败,通常根据注解属性值和实体类属性值进⾏校验判断
/**
* 银⾏通知客户临柜时间(必填)
*/
@NotBlank(message="银⾏通知客户临柜时间不能为空")
@DateTimeStr(format ="yyyy-MM-dd HH:mm:ss", message = "格式错误,正确格式为:yyyy-MM-dd HH:mm:ss")
private String bankApplyTime;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。