【问题标题】:exclude some fields from @Valid validation从@Valid 验证中排除一些字段
【发布时间】:2015-06-30 03:46:12
【问题描述】:

我使用 Spring 的 @Valid 注释来验证带有 javax.constraints 注释的 bean 字段。

但是当我需要从验证中排除某些字段时(仅适用于某些情况),我遇到了问题。

我进行了调查,没有发现任何有用的方法,并且大多数答案的日期为 2010-2011。这是相当令人惊讶的,因为这种情况如此普遍。

Spring 4.+ 从那时起有什么变化吗?或者也许任何人都可以分享如何打败这个的个人经验?

谢谢。

【问题讨论】:

    标签: java spring spring-mvc jakarta-ee annotations


    【解决方案1】:

    您可以使用验证组和@Validated 注释。

    http://www.javacodegeeks.com/2014/08/validation-groups-in-spring-mvc.html有详细说明

    该方法基于hibernate validator's groups,它使您能够根据标记接口对验证进行分组并将其应用于处理程序级别,如链接中给出的示例

    @RequestMapping(value = "stepTwo", method = RequestMethod.POST)
    public String stepTwo(@Validated(Account.ValidationStepTwo.class) Account account, Errors errors) {
      if (errors.hasErrors()) {
          return VIEW_STEP_TWO;
      }
      return "redirect:summary";
    }
    

    【讨论】:

    • 正是我需要的。大家注意:@Validated 的名称可能会产生误导,因为我乍一看认为我应该传递给它要跳过的组,但实际上是相反的。此外,作为仅验证默认组的占位符,您可以使用以提高可读性:@Validated(javax.validation.groups.Default.class) 等于 @Validated 不带参数。
    • There is also answer 如何不为每个字段复制Default.class。但不幸的是,它仅适用于将字段添加到默认验证,而不是排除它。
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2023-03-15
    • 2013-07-18
    • 2020-03-28
    • 2012-08-27
    • 2011-10-17
    • 2018-10-10
    相关资源
    最近更新 更多