hibernate_validator_10
约束条件组合--把多个约束组合成一个约束
上一节中我们自定义的@CheckCase是用来检查是否String为大写的注释,默认情况下当我们的String为null的时候也被认为正确的
CaseMode枚举
- package test02;
- public enum CaseMode {
- UPPER,
- LOWER;
- }
User类
- package test02;
- public class User {
- @CheckCase(value=CaseMode.UPPER)
- private String name;
- // @CheckCase(CaseMode.UPPER)
- // private String email="email";
- }
@CheckCase
- package test02;
- import static java.lang.annotation.ElementType.*;
- import static java.lang.annotation.RetentionPolicy.*;
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import javax.validation.Constraint;
- import javax.validation.Payload;
- @Target({METHOD, FIELD, ANNOTATION_TYPE })
- @Retention(RUNTIME)
- @Constraint(validatedBy = CheckCaseValidator.class)
- @Documented
- public @interface CheckCase {
- String message() default "{test02.CheckCase.message}";
- Class<?>[] groups() default {};
- Class<? extends Payload>[] payload() default {};
- CaseMode value();
- }
验证器
- package test02;
- import javax.validation.ConstraintValidator;
- import javax.validation.ConstraintValidatorContext;
- public class CheckCaseValidator implements ConstraintValidator<CheckCase, String> {
- private CaseMode caseMode;
- public void initialize(CheckCase constraintAnnotation) {
- this.caseMode = constraintAnnotation.value();
- }
- public boolean isValid(String object, ConstraintValidatorContext constraintContext) {
- if (object == null)
- return true;
- boolean isValid;
- if (caseMode == CaseMode.UPPER) {
- isValid = object.equals(object.toUpperCase());
- } else {
- isValid = object.equals(object.toLowerCase());
- }
- // if(!isValid) {
- // constraintContext.disableDefaultConstraintViolation();
- // constraintContext.buildConstraintViolationWithTemplate( "{com.mycompany.constraints.CheckCase.message}" ).addConstraintViolation();
- // }
- return isValid;
- }
- }
运行结果:
- @Test
- public void test01(){
- User u=new User();
- Set<ConstraintViolation<User>> validate = validator.validate(u);
- System.out.println(validate.size());
- //
- System.out.println(validate);
- //[]
- }
所以这一节我们将该注释和@notNull的注释组合起来
一,创建一个约束条件组合 @UpperNotNull
- package test03;
- import static java.lang.annotation.ElementType.*;
- import static java.lang.annotation.RetentionPolicy.*;
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import javax.validation.Constraint;
- import javax.validation.Payload;
- import javax.validation.constraints.NotNull;
- import test02.CheckCase;
- import test02.CaseMode;
- @NotNull
- @CheckCase(CaseMode.UPPER)
- @Target( { METHOD, FIELD, ANNOTATION_TYPE })
- @Retention(RUNTIME)
- @Constraint(validatedBy = {})
- @Documented
- public @interface UpperNotNull {
- String message() default "{com.mycompany.constraints.validlicenseplate}";
- Class<?>[] groups() default {};
- Class<? extends Payload>[] payload() default {};
- }
- package test02;
- import static java.lang.annotation.ElementType.*;
- import static java.lang.annotation.RetentionPolicy.*;
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import javax.validation.Constraint;
- import javax.validation.Payload;
- @Target({METHOD, FIELD, ANNOTATION_TYPE })
- @Retention(RUNTIME)
- @Constraint(validatedBy = CheckCaseValidator.class)
- @Documented
- public @interface CheckCase {
- String message() default "{test02.CheckCase.message}";
- Class<?>[] groups() default {};
- Class<? extends Payload>[] payload() default {};
- CaseMode value();
- }
属性文件中的内容
- test02.CheckCase.message = must be false {value}
- com.mycompany.constraints.validlicenseplate=must not be null and must be Upper writen
二,创建Po测试类
- package test03;
- public class User {
- @UpperNotNull
- private String name;
- // @CheckCase(CaseMode.UPPER)
- // private String email="email";
- }
三,测试
- package test03;
- import java.util.Set;
- import javax.validation.ConstraintViolation;
- import javax.validation.Validation;
- import javax.validation.Validator;
- import javax.validation.ValidatorFactory;
- import org.junit.BeforeClass;
- import org.junit.Test;
- public class MyTest {
- private static Validator validator;
- /**
- * 获取一个验证器
- */
- @BeforeClass
- public static void setUp() {
- ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
- validator = factory.getValidator();
- }
- @Test
- public void test01(){
- User u=new User();
- Set<ConstraintViolation<User>> validate = validator.validate(u);
- System.out.println(validate.size());
- //
- System.out.println(validate);
- //[ConstraintViolationImpl{interpolatedMessage='不能为null', propertyPath=name, rootBeanClass=class test03.User, messageTemplate='{javax.validation.constraints.NotNull.message}'}]
- }
- }
当我们把Po类中的name改成:
- package test03;
- public class User {
- @UpperNotNull
- private String name="wangyang";
- // @CheckCase(CaseMode.UPPER)
- // private String email="email";
- }
再测试:
- @Test
- public void test01(){
- User u=new User();
- Set<ConstraintViolation<User>> validate = validator.validate(u);
- System.out.println(validate.size());
- //
- System.out.println(validate);
- //[ConstraintViolationImpl{interpolatedMessage='must be false UPPER', propertyPath=name, rootBeanClass=class test03.User, messageTemplate='{test02.CheckCase.message}'}]
- }
hibernate_validator_10的更多相关文章
随机推荐
- C++ STL的各种实现版本
ANSI/ISO的C++ STL规范版本正式通过以后,各个C++编译器厂商就可以依照标准所描述的原型去实现C++ STL泛型库,于是出现多种符合标准接口,但具体实现代码不同的泛型库,主要有: HP S ...
- AlgorithmsI PA2: Randomized Queues and Deques Subset
本题的bonus是 因此方法是queue的size 达到了K, 就停止增加元素,保证queue.size() 最大时只有k. Java code: import edu.princeton.cs.al ...
- zoj3229 Shoot the Bullet(有源汇有上下界的最大流)
题意: 一个屌丝给m个女神拍照,计划拍照n天,每一天屌丝给给定的C个女神拍照,每天拍照数不能超过D张,而且给每个女神i拍照有数量限制[Li,Ri],对于每个女神n天的拍照总和不能少于Gi,如果有解求屌 ...
- ♫【HTML5 敏捷实践】第1章 使用语义化的方式实现
<!DOCTYPE html> 向后兼容的HTML5<doctype>标签.HTML5规范规定<doctype>对大小写不敏感:然而,之前版本的HTML需要< ...
- (转载)PHP中刷新输出缓冲
(转载)http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html PHP中刷新输出缓冲buffer是一个内存地址空间,Linux系统默 ...
- C#代码实现隐藏任务栏、开始菜单和禁用任务管理
一:截图,主要是调用系统接口和更改注册表实现功能 二:代码 using System; using System.Collections.Generic; using System.Linq; usi ...
- Validate Binary Search Tree——LeetCode
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- 手机app
手机app是什么? 由于iPhone.三星等智能手机的逐步流行和广泛普及,手机app这个词语开始频繁的出现在广大手机网民的视线中.也许你们还不知道什么是手机app,但你一定下载过手机app,你的手机里 ...
- python关键字、转义符和字符串格式化
最近在学learn python the hard way,学习到第37章,进行了关于关键字.转义符和字符串格式化的总结.看手头上的中文版没有及时更新.于是就把这些翻译过来,以作查阅. 关键字: 关键 ...
- python 解析xml 文件: SAX方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...