SpringBoot基础教程2-1-8 数据验证-自定义日期格式验证
2018-08-08 10:23
477 查看
1 概述
javax.validation包与
hibernate-validator包中注解能满足大部分需求,但是还是有必要熟悉下自定义数据验证注解,如日期格式验证。
2 添加依赖
<dependencies> <!-- 唯一需要依赖,默认就内嵌了Tomcat容器,如需要更换容器Jetty、Undertow也极其简单--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--该依赖只会在编译时调用--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> </dependencies>
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<DateTime, String> { 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 测试结果
8 工程目录
9 结束语
说点什么呢,有任何建议,欢迎留言探讨,本文源码。欢迎关注博主公众号,第一时间推送最新文章
相关文章推荐
- SpringBoot基础教程2-1-9 数据验证-分组验证
- SpringBoot基础教程2-1-7 数据验证-基础数据验证
- springboot @RequestBody使用JsonSerialize与 JsonDeserialize自定义转参数,处理Date日期格式
- Spring Boot 日期数据格式转换@JsonFormat实例
- Spring Boot 日期数据格式转换@JsonFormat实例
- Spring Boot 日期数据格式转换@JsonFormat实例
- SpringBoot基础教程及框架整合(一)----IDEA创建SpringBoot项目
- Spring Boot中整合Spring Security并自定义验证代码实例
- springboot 返回json格式数据的时间格式配置
- Spring Boot自定义注解和它的联动过滤验证效果
- Spring Boot教程(六)在springboot中验证表单信息
- Spring boot 自定义统一异常处理(以及规范响应格式)
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- 14-SpringBoot——Spring MVC基础-自定义HttpMessageConverter
- 在Spring Boot中整合Spring Security并自定义验证代码
- Spring Boot基础教程9-web应用开发-错误处理
- 在java Spring基础上实现自定义异常处理框架教程
- 关于SpringBoot自定义注解(解决post接收String参数 null(前台传递json格式))
- springboot 基于 maven 自定义格式打包