今天在项目上加上了校验,想来想去也没啥好用的,只能选用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);
}
}
}
完成
本文介绍了如何在Maven项目中引入hibernate-validator库,并演示了如何自定义校验注解和实现校验接口。通过示例代码,展示了如何验证实体对象属性是否符合设定的最大值限制。
882

被折叠的 条评论
为什么被折叠?



