解决:Hibernate-Validator仅仅返回第一条错误信息

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_26769513/article/details/83303824

在RESTful中使用Hibernate-Validator的时候,都是这样一种方法使用。或者类似的方式进行异常校验。我也是参照了别人的文档这么写的。


 
 
  1. /**
  2. * 接口入参数据校验工具类.
  3. * 使用hibernate-validator进行校验.
  4. * 其中加入自定义的校验器
  5. *
  6. * @author wuss45
  7. * @date 2018年10月19日-17时08分
  8. */
  9. public class ValidationUtil {
  10. private static final Logger logger = LoggerFactory.getLogger(ValidationUtil.class);
  11. /**
  12. * 使用hibernate的注解来进行验证
  13. */
  14. private static Validator validator = Validation
  15. .byProvider(HibernateValidator.class).configure().failFast( true).buildValidatorFactory().getValidator();
  16. /**
  17. * 默认校验器校验
  18. *
  19. * @param obj
  20. */
  21. public static <T> Result defaultValidate(T obj) {
  22. logger.info( "开始对类型{}进行校验", obj.getClass());
  23. try {
  24. Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
  25. if (constraintViolations.size() > 0) {
  26. String message = constraintViolations.iterator().next().getMessage();
  27. logger.warn( "存在不在异常枚举中的异常:{}", message);
  28. return ResponseUtil.operateFail( 999999, message);
  29. }
  30. logger.info( "表单校验通过");
  31. return null;
  32. } catch ( Exception ex) {
  33. Throwable cause = ex.getCause();
  34. //判断异常类型,业务异常包装一下再返回
  35. if (cause instanceof SpecialException) {
  36. ExceptionEnum exceptionEnum = ((SpecialException) cause).getExceptionEnum();
  37. logger.warn( "对表单类{}校验存在异常:{}", obj.getClass(), exceptionEnum.getMessage());
  38. return ResponseUtil.operateFail(exceptionEnum.getCode(), exceptionEnum.getMessage());
  39. }
  40. logger.error( "系统错误");
  41. return null;
  42. }
  43. }
  44. }

但是这样写你会发现,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。

我们来看一下这个方法的源码注释:


 
 
  1. /**
  2. * En- or disables the fail fast mode. When fail fast is enabled the validation
  3. * will stop on the first constraint violation detected.
  4. *
  5. * @param failFast {@code true} to enable fail fast, {@code false} otherwise.
  6. *
  7. * @return {@code this} following the chaining method pattern
  8. */
  9. HibernateValidatorConfiguration failFast(boolean failFast);

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值