java注解定义时间格式_SpringBoot基础教程2-1-8数据验证-⾃
定义⽇期格式验证
1 概述
javax.validation包与hibernate-validator包中注解能满⾜⼤部分需求,但是还是有必要熟悉下⾃定义数据验证注解,如⽇期格式验证。
2 添加依赖
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
1.16.20
provided
3 ⾃定义注解
定义⼀个@DateTime注解
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateTimeValidator.class)
public @interface DateTime {
String message() default "格式错误";
String format() default "yyyyMM";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
@Constraint,指定校验类
message,失败提⽰信息
groups,分组验证(后⾯介绍)
java时间日期格式转换payload,不知道,欢迎留⾔探讨
4 实现具体验证类
public class DateTimeValidator implements ConstraintValidator {
private DateTime dateTime;
@Override
public void initialize(DateTime dateTime) {
this.dateTime = dateTime;
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 如果 value 为空则不进⾏格式验证,为空验证可以使⽤ @NotBlank @NotNull @NotEmpty 等注解来进⾏控制,职责分离if (value == null) {
return true;
}
String format = dateTime.format();
if (value.length() != format.length()) {
return false;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
try {
simpleDateFormat.parse(value);
} catch (Exception e){
return false;
}
return true;
}
}
实现ConstraintValidator接⼝,定义initialize和isValid⽅法。
initialize,主要⽤于初始化,它可以获得当前注解的所有属性
isValid,进⾏约束验证的主体⽅法,其中 value 就是验证参数的具体实例,context 代表约束执⾏的上下⽂环境。
5 实体类
@Data
public class User {
@NotNull(message = "名字不能为空")
@Length(min = 4, max = 10, message = "name 长度必须在 {min} - {max} 之间")
private String name;
@NotNull(message = "⽣⽇不能为空")
@DateTime(format = "yyyyMMdd", message = "格式错误,正确格式为:yyyyMMdd")
private String birthday;
}
6 控制层
@RestController
public class UserController {
@PostMapping("/user")
public R addUser(@Validated @RequestBody User user, BindingResult br) { if (br.hasErrors()) {
return R.isFail().FieldError().getDefaultMessage());
} else {
return R.isOk().data(user);
}
}
}
7 测试结果
8 ⼯程⽬录
9 结束语
说点什么呢,有任何建议,欢迎留⾔探讨,本⽂源码。欢迎关注博主,第⼀时间推送最新⽂章

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