您的位置:首页 > 编程语言 > Java开发

java 集成hibernate valitator校验

2015-12-24 15:00 501 查看
今天在项目上加上了校验,想来想去也没啥好用的,只能选用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;

@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);
}
}
}


完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: