java 集成hibernate valitator校验
2015-12-24 15:00
501 查看
今天在项目上加上了校验,想来想去也没啥好用的,只能选用hibernate-validator了:
废话不多说,直接上代码:
如果是Maven项目请导入下面几句话:
用默认的校验的话,导入上面的就够了,如果要自定义注解,请继续导入:
非Maven项目请导入3个包:
hibernate_validator-4.3.1.Final.jar
validation-api-1.0.0GA.jar
hibernate-validator-annotation-processor-4.3.1.Final.jar
搞定,jar包都导入完毕,开始动手做了,默认的注解直接在实体对象@NotNull啥的就OK了,我就不讲了,直接讲自定义校验:
定义:
1.声明校验注解
2.实现校验接口
调用:
完成
废话不多说,直接上代码:
如果是Maven项目请导入下面几句话:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator-annotation-processor</artifactId> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> </dependency>
用默认的校验的话,导入上面的就够了,如果要自定义注解,请继续导入:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.3.Final</version> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.el</artifactId> <version>2.2.4</version> </dependency>
非Maven项目请导入3个包:
hibernate_validator-4.3.1.Final.jar
validation-api-1.0.0GA.jar
hibernate-validator-annotation-processor-4.3.1.Final.jar
搞定,jar包都导入完毕,开始动手做了,默认的注解直接在实体对象@NotNull啥的就OK了,我就不讲了,直接讲自定义校验:
定义:
1.声明校验注解
package com.sf.sgs.user.core.request.util.validation.constraints; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; 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.sf.sgs.user.core.request.util.validation.constraints.validator.MaxValidator; @Target({ METHOD, FIELD, ANNOTATION_TYPE }) @Retention(RUNTIME) @Constraint(validatedBy = MaxValidator.class) @Documented /** * 最大值 * @author leantaot * */ public @interface Max { String message() default "超过最大值"; //默认异常信息 int value() default 30; //默认最大值 String errorCode() default "01000000001X"; //默认异常码<pre name="code" class="java"><span style="white-space:pre"> </span>//以下这两个参数必须加 Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
2.实现校验接口
package com.sf.sgs.user.core.request.util.validation.constraints.validator; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import com.sf.sgs.user.core.request.util.validation.constraints.Max; public class MaxValidator implements ConstraintValidator<Max, Integer>{ private int maxValue = 0; @Override public void initialize(Max max) { try { maxValue = max.value(); } catch (Exception e) { } } @Override public boolean isValid(Integer value, ConstraintValidatorContext context) { if (value != null && value <= maxValue) { return true; } else{ return false; } } }3.如果你不想让他输出默认的信息,请在上面的return false前加上:
context.disableDefaultConstraintViolation(); // 禁用默认值 context.buildConstraintViolationWithTemplate("自定义输入信息") .addConstraintViolation();
调用:
package com.sf.sgs.user.core.service.impl.util.validation; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import org.apache.commons.collections.CollectionUtils; import com.sf.sgs.user.core.service.impl.util.PrintLogUtil; public class HibernateValidation { public static void main(String[] args) { Userss u = new Userss(); u.setAge(1); u.setName(null); u.setPwd("123"); HibernateValidation.validation(u); } /** * 校验对象数据 * @param target 对象 * @return String */ public static <T> void validation(T target){ try { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set<ConstraintViolation<T>> set = validator.validate(target); if(CollectionUtils.isNotEmpty(set)){ if(set.size() > 0){ for (ConstraintViolation<T> cons : set) { System.out.println("字段:"+cons.getPropertyPath()); System.out.println("值:"+cons.getInvalidValue()); System.out.println("异常信息:"+cons.getMessage()); } } } } catch (Exception e) { PrintLogUtil.printErrorLog(HibernateValidation.class, e); } } }
完成
相关文章推荐
- Eclipse使用ButterKnife前,需要的配置步骤
- JAVA Properties使用
- ajax配合java简单案例
- Java HashSet的元素内容变化导致的问题
- JAVA基础知识整理记录
- Spring boot配置拦截器
- 使用CXF+spring+restful创建一个web的接口项目
- 轻量级JavaEE企业应用实战(十六)
- java中字符串与时间转换
- Java 线程简介
- Java中Synchronized和Lock的使用
- jvm加载过程解析
- struts 2 配置文件加载顺序
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- spring中注解的实现原理
- Java开发中的23种设计模式详解(转)
- java jdk查看源代码
- spring mvc 上传文件
- Java中字符串中子串的查找共有四种方法(indexof())
- Java后台处理ajax跨域请求处理