SpringMvc (六) 自定义验证
2016-01-20 19:10
656 查看
1.创建 MyValidate 注解类
package com.springmvc.myAnnotation; import javax.validation.ConstraintValidator; //注解能放 在字段上 @java.lang.annotation.Target( value={ java.lang.annotation.ElementType.FIELD, } ) //注解 的保留策略 @java.lang.annotation.Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Documented /* 验证注解通过 自定义验证类 实行验证 在这个类必须实现 ConstraintValidator<?,?>接口 * 第一个泛型 是本注解的名称 * 第二个泛型 是验证的对象类型 * */ @javax.validation.Constraint(validatedBy={ValidateHandler.class}) public @interface MyValidate { //正则通配符 public abstract java.lang.String regex(); //验证信息 public abstract java.lang.String message() default "{javax.validation.constraints.Pattern.message}"; public abstract java.lang.Class[] groups() default {}; public abstract java.lang.Class[] payload() default {}; }
2.创建注解处理类 ValidateHandler
package com.springmvc.myAnnotation; import java.lang.annotation.Annotation; import java.util.regex.Pattern; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.apache.log4j.Logger; import org.hibernate.validator.ap.checks.ConstraintValidatorCheck; import com.sun.org.apache.xerces.internal.impl.validation.ValidationState; import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match; /*自定义验证实现 ConstraintValidator * 重写 initialize 和 isValid * * initialize 是初始化方法 可以做查询数据库等操作 * * isValid 是验证处理方法,return true 表示验证通过 * */ public class ValidateHandler implements ConstraintValidator<MyValidate,String> { private Logger rootLogger = Logger.getLogger(ValidateHandler.class); private String regex; public void initialize(MyValidate info) { // TODO Auto-generated method stub //验证失败信息 rootLogger.debug(info.message()); this.regex = info.regex(); } public boolean isValid(String filedValue, ConstraintValidatorContext cvc) { //验证字段的值 rootLogger.debug(filedValue); rootLogger.debug(cvc); //如果匹配上注解上的通配符 验证通过 return Pattern.matches(regex, filedValue); } }
3.创建待验证对象 User
加入自定义注解验证package com.springmvc.myAnnotation; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; public class User { @MyValidate(regex="^[a-zA-Z]+$.+",message="名字必须是字母开头") private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
4.测试自定义验证
package com.springmvc.myAnnotation; import java.util.Iterator; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import org.apache.log4j.Logger; import org.junit.Test; public class TestMyValidator { private Logger rootLogger = Logger.getLogger(TestMyValidator.class); @Test public void TestValidate() { //通过 Validation 构造 DefaultValidatorFactory 工厂 ValidatorFactory hvf = Validation.buildDefaultValidatorFactory(); //通过 ValidatorFactory 获取 validate Validator validator= hvf.getValidator(); //创建一个待验证 user 实例 为其赋值 User user = new User(); user.setName("11"); //通过 Validator 验证 user 实例 返回 ConstraintViolation<User> 集合 Set<ConstraintViolation<User>> cvs = validator.validate(user); //获取 迭代器 Iterator<ConstraintViolation<User>> ite = cvs.iterator(); while(ite.hasNext()){ ConstraintViolation<User> cv = ite.next(); //获取 验证错误 信息 message rootLogger.debug(cv.getMessage()); //获取错误的字段名称 rootLogger.debug(cv.getPropertyPath()); } } }
相关文章推荐
- JavaSE入门学习5:Java基础语法(一)
- 提高Eclipse对编辑jsp文件的智能提示-安装Aptana Studio 3插件
- Mybatis整合Spring
- Spring的BeanUtils.copyProperties用法
- [Java工具类]spring常用工具类 2.特殊字符转义和方法入参检测工具类
- [Java工具类]Spring常用工具类 1.文件资源操作和Web相关工具类
- java.lang.NoSuchFieldException: resourceEntries
- Java 基础——类和对象
- Java String.isEmpty()
- SpringMVC token 防止表单重复提交
- 分析和解决JAVA 内存泄露的实战例子
- Java的内存泄漏
- Windows 测试txt或者java文件传递到Mac上出现乱码
- 将MyEclipse的配色方案还原到最初的状态(主题还原)
- spring监听与IBM MQ JMS整合
- web.xml中配置Struts标记库<taglib>标签总是报错出现红色下划线
- [Java工具集]Google Guava 常用功能
- MAVEN整合Spring+SpringMVC+Mybatis
- URL中增加BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)
- Maven3路程(六)用Maven创建Spring3 MVC项目