版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
在RESTful中使用Hibernate-Validator的时候,都是这样一种方法使用。或者类似的方式进行异常校验。我也是参照了别人的文档这么写的。
-
/**
-
* 接口入参数据校验工具类.
-
* 使用hibernate-validator进行校验.
-
* 其中加入自定义的校验器
-
*
-
* @author wuss45
-
* @date 2018年10月19日-17时08分
-
*/
-
public
class ValidationUtil {
-
-
private
static
final Logger logger = LoggerFactory.getLogger(ValidationUtil.class);
-
-
/**
-
* 使用hibernate的注解来进行验证
-
*/
-
private
static Validator validator = Validation
-
.byProvider(HibernateValidator.class).configure().failFast(
true).buildValidatorFactory().getValidator();
-
-
/**
-
* 默认校验器校验
-
*
-
* @param obj
-
*/
-
public
static <T> Result defaultValidate(T obj) {
-
logger.info(
"开始对类型{}进行校验", obj.getClass());
-
-
try {
-
Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
-
if (constraintViolations.size() >
0) {
-
String message = constraintViolations.iterator().next().getMessage();
-
logger.warn(
"存在不在异常枚举中的异常:{}", message);
-
return ResponseUtil.operateFail(
999999, message);
-
}
-
logger.info(
"表单校验通过");
-
return
null;
-
}
catch (
Exception ex) {
-
Throwable cause = ex.getCause();
-
//判断异常类型,业务异常包装一下再返回
-
if (cause
instanceof SpecialException) {
-
ExceptionEnum exceptionEnum = ((SpecialException) cause).getExceptionEnum();
-
logger.warn(
"对表单类{}校验存在异常:{}", obj.getClass(), exceptionEnum.getMessage());
-
return ResponseUtil.operateFail(exceptionEnum.getCode(), exceptionEnum.getMessage());
-
}
-
logger.error(
"系统错误");
-
return
null;
-
}
-
}
-
-
}
但是这样写你会发现,Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);中的constraintViolations只是包含一个错误信息。
究其原因,上面的代码是构建校验器的时候传递的参数配置决定的。我们来看:private static Validator validator = Validation
.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
代码" .failFast(true) " ,当参数为true的时候,遇到一次个错误信息就会返回。我要获取全部的错误信息,需要把这个true改为false。
我们来看一下这个方法的源码注释:
-
/**
-
* En- or disables the fail fast mode. When fail fast is enabled the validation
-
* will stop on the first constraint violation detected.
-
*
-
* @param failFast {@code true} to enable fail fast, {@code false} otherwise.
-
*
-
* @return {@code this} following the chaining method pattern
-
*/
-
HibernateValidatorConfiguration failFast(boolean failFast);