导入jar包
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.2.Final</version>
</dependency>
- 导入jar包可能遇到的问题
java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider
这是由于 hibernate-validator5.x之后的版本 已经不兼容 validation-api了,解决办法
要么将 hibernate-validator5.x 版本降低,要么将validation-api版本升高。
编写VolidationUtils工具类
import org.hibernate.validator.HibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
/**
* Created by zhanghe
* 2018/2/7.
*/
public class ValidationUtils {
/**
* 使用hibernate的注解来进行验证
*
*/
private static Validator validator = Validation
.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
/**
* 功能描述:
* 〈注解验证参数〉
*
* @param obj
*/
public static <T> String validate(T obj) {
Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
//验证不通过,取得违规message 并返回
if (constraintViolations.size() > 0) {
return constraintViolations.iterator().next().getMessage();
}
return "success";
}
}
设置注解
- 在接收参数的Vo类上添加注解,相关注解如下
在这里将例举比较常用的几种
- @AssertTrue //用于boolean字段,该字段只能为true
- @AssertFalse//该字段的值只能为false
- @CreditCardNumber//对信用卡号进行一个大致的验证
- @DecimalMax//只能小于或等于该值
- @DecimalMin//只能大于或等于该值
- @Digits(integer=2,fraction=20)//检查是否是一种数字的整数、分数,小数位数的数字。
- @Email//检查是否是一个有效的email地址
- @Future//检查该字段的日期是否是属于将来的日期
- @Length(min=,max=)//检查所属的字段的长度是否在min和max之间,只能用于字符串
- @Max//该字段的值只能小于或等于该值
- @Min//该字段的值只能大于或等于该值
- @NotNull//不能为null
- @NotBlank//不能为空,检查时会将空格忽略
- @NotEmpty//不能为空,这里的空是指空字符串
- @Null//检查该字段为空
- @Past//检查该字段的日期是在过去
- @Size(min=, max=)//检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
- @URL(protocol=,host,port)//检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件
- @valid //指定递归关联的对象
开始验证
在控制层接收参数时,调用ValidationUtil
public RspVo save(@RequestBody ActivityRecordSaveVo data) {
//调用参数验证工具类
String validate = ValidationUtils.validate(data);
if(!validate.equals("success")){
//验证失败,返回异常信息
return RspVo.error(TeachPlatformCode.PARAM_ERROR_CODE,validate);
}
个人原创,转载需经博主同意且标明出处