简单实现hibernate-validator拓展
概要
最近在使用hibernate-validator针对VO做一些简单校验. 其中有一个业务场景是需要校验日期参数必须大于某一天, 比如1970-01-01 08:30:00等.
初步的方案是先创建一个注解类, 比如@DateAfter, 再指定@DateAfter的校验器DateAfterValidator, 再然后实现该校验器DateAfterValidator.
DateAfter.java
<pre name="code" class="java">package com.feisheng.annotation;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;import static java.lang.annotation.ElementType.CONSTRUCTOR;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.ElementType.PARAMETER;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import javax.validation.Constraint;import javax.validation.Payload;import com.vip.vpal.zc.admin.validator.DateAfterValidator;/** * The annotated element must be a date, and after the specified date. * Only accepts Date. * @author eric.mo */@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })@Retention(RUNTIME)@Documented@Constraint(validatedBy = { DateAfterValidator.class })public @interface DateAfter { String message() default "时间取值不正确"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; long value() default 31536000000L; /** * Defines several {@link DateAfter} annotations on the same element. * * @see DateAfter */ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @Documented @interface List { DateAfter[] value(); }}
DateAfterValidator.java
package com.feisheng.validator;import java.util.Date;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;import com.vip.vpal.zc.admin.annotation.DateAfter;/*** The annotated element must be a date, and after the specified date.* Only accepts Date.* @author eric.mo*/
public class DateAfterValidator implements ConstraintValidator<DateAfter, Date> {private Long setDateTime;@Overridepublic void initialize(DateAfter constraintAnnotation) {setDateTime = constraintAnnotation.value();}@Overridepublic boolean isValid(Date value, ConstraintValidatorContext context) {if (value == null) {return true;}return value.after(new Date(setDateTime));}}
使用方式
@DateAfterprivate Date sellStartTime; //直接添加注解
然后再使用hibernate-validator校验即可.
简单实现hibernate-validator拓展相关推荐
- Hibernate Validator 后台数据规则校验拓展
目录 1.dto 1-1.UserInfo 2.rules 2-1.after 2-1-1.UserInfoAfterRuleValid.java 2-2.before 2-2-1.UserInfoB ...
- Hibernate Validator源码解析
一.引言 问题:在代码编写的过程中,数据值的校验在JavaEE三层架构(展示层.业务层.数据访问层)均有涉及,各层的校验需求又是不尽相同的,因此往往会伴随着代码冗余,重复的校验逻辑出现在三层代码中. ...
- springboot使用hibernate validator校验
回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...
- Spring Validation(使用Hibernate Validator)
1.需要的jar包 hibernate-validator.5.1.3.Final.jar validation-api.1.1.0.Final.jar 2.springsevlet-config.x ...
- spring boot 1.4默认使用 hibernate validator
spring boot 1.4默认使用 hibernate validator 5.2.4 Final实现校验功能.hibernate validator 5.2.4 Final是JSR 349 Be ...
- Hibernate Validator JSR303示例教程
Hibernate Validator JSR303示例教程 欢迎使用Hibernate Validator示例教程.数据验证是任何应用程序的组成部分.您将使用Javascript在表示层找到数据验证 ...
- Spring Boot集成Hibernate Validator
废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...
- Springboot2参数校验: Hibernate Validator自定义注解
1.Hibernate Validator介绍 Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constrain ...
- SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑
SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...
- 如何优雅的做数据校验-Hibernate Validator详细使用说明
文章目录 Hibernate Validator的使用 依赖 bean约束声明和验证,Validator 方法约束声明和验证,ExecutableValidator 约束注解 空与非空检查 Boole ...
最新文章
- 2020年中国AI算力报告发布:超大算法模型挑战之下,公共AI算力基建是关键
- 互联网协议 — OAuth2 第三方授权协议
- 把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)
- linux下tar包安装sudo命令,ubuntu12.04LTS安装gv-412-Linux-x86.tar.gz方法
- matlab cell转数组_MATLAB批量修改文件名
- 渗透测试入门26之给你一个网站你是如何来渗透测试的?
- XStream入门应用程序
- eclipse里安装SVN插件的两种方式
- ABAP:cl_system_uuid=>create_uuid_c32_static( )
- win98万能显卡驱动_win98/98系统 u盘万能驱动
- MicrosoftActiveSync 安装
- 适应iPhone5的尺寸
- 爬取网站使用代理IP
- 3D游戏引擎架构设计基础 - 学堂在线慕课习题答案
- CAD图纸显示不全?别慌,有浩辰CAD!
- 5G 中的SDN/NFV 和云计算
- Android选项卡
- 零基础转行,入职军工类测试方向,月薪10K | 既然选择了,就要全力以赴
- 使用js来实现分页功能
- 如何卸载IE9恢复IE8浏览器?