概要

最近在使用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校验即可.

package com.vip.vpal.zc.admin.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; @Override public void initialize(DateAfter constraintAnnotation) { setDateTime = constraintAnnotation.value(); } @Override public boolean isValid(Date value, ConstraintValidatorContext context) { if (value == null) { return true; } return value.after(new Date(setDateTime)); }}

简单实现hibernate-validator拓展相关推荐

  1. Hibernate Validator 后台数据规则校验拓展

    目录 1.dto 1-1.UserInfo 2.rules 2-1.after 2-1-1.UserInfoAfterRuleValid.java 2-2.before 2-2-1.UserInfoB ...

  2. Hibernate Validator源码解析

    一.引言 问题:在代码编写的过程中,数据值的校验在JavaEE三层架构(展示层.业务层.数据访问层)均有涉及,各层的校验需求又是不尽相同的,因此往往会伴随着代码冗余,重复的校验逻辑出现在三层代码中. ...

  3. springboot使用hibernate validator校验

    回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...

  4. Spring Validation(使用Hibernate Validator)

    1.需要的jar包 hibernate-validator.5.1.3.Final.jar validation-api.1.1.0.Final.jar 2.springsevlet-config.x ...

  5. 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 ...

  6. Hibernate Validator JSR303示例教程

    Hibernate Validator JSR303示例教程 欢迎使用Hibernate Validator示例教程.数据验证是任何应用程序的组成部分.您将使用Javascript在表示层找到数据验证 ...

  7. Spring Boot集成Hibernate Validator

    废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...

  8. Springboot2参数校验: Hibernate Validator自定义注解

    1.Hibernate Validator介绍 Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constrain ...

  9. SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑

    SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...

  10. 如何优雅的做数据校验-Hibernate Validator详细使用说明

    文章目录 Hibernate Validator的使用 依赖 bean约束声明和验证,Validator 方法约束声明和验证,ExecutableValidator 约束注解 空与非空检查 Boole ...

最新文章

  1. 2020年中国AI算力报告发布:超大算法模型挑战之下,公共AI算力基建是关键
  2. 互联网协议 — OAuth2 第三方授权协议
  3. 把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)
  4. linux下tar包安装sudo命令,ubuntu12.04LTS安装gv-412-Linux-x86.tar.gz方法
  5. matlab cell转数组_MATLAB批量修改文件名
  6. 渗透测试入门26之给你一个网站你是如何来渗透测试的?
  7. XStream入门应用程序
  8. eclipse里安装SVN插件的两种方式
  9. ABAP:cl_system_uuid=>create_uuid_c32_static( )
  10. win98万能显卡驱动_win98/98系统 u盘万能驱动
  11. MicrosoftActiveSync 安装
  12. 适应iPhone5的尺寸
  13. 爬取网站使用代理IP
  14. 3D游戏引擎架构设计基础 - 学堂在线慕课习题答案
  15. CAD图纸显示不全?别慌,有浩辰CAD!
  16. 5G 中的SDN/NFV 和云计算
  17. Android选项卡
  18. 零基础转行,入职军工类测试方向,月薪10K | 既然选择了,就要全力以赴
  19. 使用js来实现分页功能
  20. 如何卸载IE9恢复IE8浏览器?

热门文章

  1. 10大最佳免费/开源产品开发进度管理系统
  2. 三层交换机DHCP中继
  3. phpwind database.php,phpwind中data目录隐藏功能设置
  4. 网上商城系统的设计与实现毕业设计
  5. Android7.0新特性Jack server
  6. 如何把U盘当作启动盘来进行一键装机
  7. 【翻译】WebGL 优化场景提高表现的基本操作
  8. php采集喜马拉雅,喜马拉雅FM爬虫问题求助!!
  9. 2021 年最新前后端免费编程学习视频
  10. 如何在Windows 10中设置和测试麦克风