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,分组验证(后面介绍)

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().msg(br.getFieldError().getDefaultMessage());

} else {

return R.isOk().data(user);

}

}

}

7 测试结果

303c0be6a04fecb5103ef17f517b5522.png

8 工程目录

2076933d8c7b5e698e395d76b95fd6ef.png

9 结束语

说点什么呢,有任何建议,欢迎留言探讨,本文源码。

欢迎关注博主公众号,第一时间推送最新文章


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部