validation注解

  • 常用注解
  • 自定义校验
    • 校验类
    • 注解类

常用注解

注解 说明
@Null 注解元素必须为null
@NotNull 注解元素必须不为null
@NotBlank 注解元素为字符串,并且被trim()以后length要大于0
@NotEmpty 注解元素是否为Null或者Empty
@AssertTrue 验证注解元素是否为 true
@AssertFalse 验证注解元素是否为 false
@Size(min=, max=) 注解元素(Array,Collection,Map,String)长度是否在给定的范围之内@Length(min=, max=)
@Max(value) 注解的元素必须为数字,且小于等于最大值
@Min(value) 注解的元素必须为数字,且大于等于最小值
@DecimalMax(value) 注解元素必须是一个数字,且小于等于最大值
@DecimalMin(value) 注解元素必须是一个数字,且大于等于最小值
@Digits(integer,fraction) 注解元素必须是一个数字,且在可接受范围
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern(regexp=正则表达式,flag=标志的模式) 验证 String 对象是否符合正则表达式的规则
@Range(min=最小值, max=最大值) 验证注解的元素值在最小值和最大值之间
@Email(regexp=正则表达式,flag=标志的模式) 验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式
@Valid 指定递归验证关联的对象;如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证

自定义校验

校验类

public class PhoneConstraintValidator implements ConstraintValidator<PhoneConstraint , Object> {/*** 手机号校验*/private final static Pattern CELL_PHONE_NUMBER = Pattern.compile("^1([35789][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$");/*** 国内固定电话校验*/private final static Pattern FIXED_TELEPHONE_NUMBER = Pattern.compile("^([0-9]{3,4}-)?[0-9]{7,8}$");private final static Pattern PHONE_AND_TEL = Pattern.compile("^1([35789][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$|^([0-9]{3,4}-)?[0-9]{7,8}$");@Overridepublic void initialize(PhoneConstraint constraintAnnotation) {System.out.println("PhoneConstraint initialize");}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {if (StringUtils.isNotBlank(value)) {//手机号校验if (CELL_PHONE_NUMBER.matcher(value).matches()) {return true;} else if (PHONE_AND_TEL.matcher(value).matches()) {return true;}// 国内固定号码正则表达式return FIXED_TELEPHONE_NUMBER.matcher(value).matches();}return true;}
}
  • 自定义校验类,实现ConstraintValidator接口,initialize方法是校验器初始化执行,initialize()可以在验证开始前调用注解里的方法,从而获取到一些注解里的参数;isValid是校验逻辑,isValid()就是判断是否合法的地方,value是属性值,context校验上下文,里面包含校验注解里面的信息。
  • 类里面可以通过@Autowire注入spring管理的bean,Spring会将实现了ConstraintValidator接口的类成bean,所以这个类不需要加@Component

注解类

@Constraint是最关键的,它表示这个注解是一个验证注解,并且指定了一个实现验证逻辑的验证器。message()指明了验证失败后返回的消息,此方法为@Constraint要求。groups()和payload()也为@Constraint要求。

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
/*** 指出当前约束是通过`PhoneConstraintValidator.class`来实现的*/
@Constraint(validatedBy = PhoneConstraintValidator.class)
public @interface PhoneConstraint {/*** 配置message信息* @return*/String message() default "请输入正确格式的手机号";/*** 分组* @return*/Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}
  • @Target注解,是专门用来限定某个自定义注解能够被应用在哪些Java元素上面的。它使用一个枚举类型定义,包括:TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、ANNOTATION_TYPE等。
  • @Retention注解,用来修饰自定义注解的生命力。可以有RetentionPolicy.SOURCE(仅保存在源码中,会被编译器丢弃),RetentionPolicy.CLASS(在class文件中可用,会被VM丢弃)以及RetentionPolicy.RUNTIME(在运行期也被保留),这里选择了生命周期最长的RetentionPolicy.RUNTIME

validation注解相关推荐

  1. java注解返回不同消息,Spring MVC Controller中的一个读入和返回都是JSON的方法如何获取javax.validation注解的异常信息...

    Spring MVC Controller中的一个读入和返回都是JSON的方法怎么获取javax.validation注解的错误信息? 本帖最后由 LonelyCoder2012 于 2014-03- ...

  2. validation注解及自定义注解

    Bean Validation 中内置的 constraint: @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 ...

  3. 自定义hibernate validation注解

    效果和优点 先看最后效果: public class UserEntity {@Password private String password;@Emailprivate String email; ...

  4. @Valid 注解详解 Java Bean Validation的前世今生

    Spring @Valid 注解 校验实体属性 1 @Valid 介绍 1.1 前言 1.2 Bean Validation 1.3 关于validation包 1.3 关于Spring Hibern ...

  5. Hibernate Validation校验注解详解

    在前后端传递数据的时候,往往后端需要校验传递数据的格式,比如用户名的格式,密码是否为空.我们可以在service层编写代码判断,但是当我们在多处需要校验传递来的数据的时候,就会出现大量重复的代码,一旦 ...

  6. java validation_java bean validation 参数验证

    一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...

  7. java注解大全_java开发注解大全

    1.最基础注解(spring-context包下的org.springframework.stereotype) 1.1.@Controller @Service @Repository @Confi ...

  8. java后台验证不能为空_java validation 后台参数验证的使用详解

    一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...

  9. postmapping注解参数说明_这么写参数校验(validator)就不会被劝退了~

    作者: 锦成同学http://juejin.im/post/5d3fbeb46fb9a06b317b3c48 整理:后端技术精选 很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者不断的返回异常时 ...

  10. Java代码简洁-validation参数校验

    validation参数校验 bean validation和hibernate validator参数校验 常用注解 1.导入依赖 2.测试 3.自定义消息模板 4.分组校验 5.级联校验 6.自定 ...

最新文章

  1. java中List深拷贝的简单实例
  2. 检查 linux guest vm 使用的什么 虚拟化技术
  3. JScrollPane 双滚动条
  4. 详解深度学习中的Normalization,不只是BN(2)
  5. boost::hana::none_of用法的测试程序
  6. ES failed shard on node[XXX]: failed recovery, failure RecoveryFailedException XXX Too many openfile
  7. doublevalue_Java Integer类doubleValue()方法与示例
  8. redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制
  9. node模块加载机制。
  10. oracle复制表结构与表数据
  11. 怎样做好一个项目经理
  12. 萌新分享打印当前目录下的所有文件和打印出里面java文件的代码
  13. JSON 转换 Excel
  14. MATLAB RGB转YUV YUV转RGB
  15. vue运行报错冒号问题,browser.js:158 Uncaught SyntaxError: Unexpected token ‘:‘
  16. Requirement already satisfied的解决方案
  17. 1.一个整形数组的最大值
  18. VSCode更改主题背景
  19. 《阿信》讲述了日本着名的百货连锁企业八佰伴创始人艰苦的过程
  20. 随路信令CAS共路信令CCS

热门文章

  1. 使用Safari只要打开echarts图表的网址会使Safari未响应
  2. java 连续数字_java 如何判断数字是否连续?求大神解答
  3. python打造批量关键词排名查询工具
  4. 手机序列号和IMEI号的区别
  5. 股票放量一定就是好事么,为什么从爆大量的高位开始下跌?
  6. 安装与配置VMware虚拟机
  7. 模重复平方计算法的C实现
  8. python opencv 图片对比度
  9. java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
  10. 微信号注册人工服务器,两个方法让你一次性找到微信人工客服,简单而又粗暴!...