java 集成hibernate valitator校验

来源:互联网 发布:淘宝店铺海报尺寸 编辑:程序博客网 时间:2024/06/01 14:24

今天在项目上加上了校验,想来想去也没啥好用的,只能选用hibernate-validator了:

废话不多说,直接上代码:

如果是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;@Overridepublic void initialize(Max max) {try {maxValue = max.value();} catch (Exception e) {}}@Overridepublic 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);}}}

完成


0 0
原创粉丝点击