java 集成hibernate valitator校验

本文介绍了如何在Maven项目中引入hibernate-validator库,并演示了如何自定义校验注解和实现校验接口。通过示例代码,展示了如何验证实体对象属性是否符合设定的最大值限制。

今天在项目上加上了校验,想来想去也没啥好用的,只能选用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);
		}
	}
}

完成


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值