从@Valid验证中排除一些字段

问题描述 投票:0回答:2

我使用 Spring 的

@Valid
注释来验证使用
javax.constraints
注释进行注释的 bean 字段。

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

我做了调查,没有找到任何有用的方法,而且大多数答案的日期都是 2010-2011 年。令人惊讶的是,这种情况如此普遍。

Spring 4.+ 与当时相比有什么变化吗?或者也许有人可以分享如何克服这个问题的个人经验?

谢谢。

java spring spring-mvc jakarta-ee annotations
2个回答
12
投票

您可以使用验证组和

@Validated
注释。

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

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

@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";
}

0
投票

我想知道为什么接受的答案建议团体? 如果我们记住OP的要求“我需要从验证中排除某些字段(仅适用于某些情况)”。 答案是“不可能”,仅在某些情况下您不能排除。实际上你要做的是包括所有地方除了不需要的。 如果我有一个具有多个字段的对象或一个由其他对象组成的对象并且嵌套很深:

public class Person {

    @NotNull
    private String firstName;

    @NotNull
    private String lastName;

    @Valid
    @NotNull
    private Address address;//deep object

<...many more fields...>
}

并且该对象被用在 100 个地方(打个比方)。我想让字段

lastName
成为
null
在一个地方(打个比方)。使用组需要对所有字段和所有嵌套对象字段以及使用此对象 Person 的所有位置进行更改。 我宁愿只标记有问题的字段,并只在那个特定的地方进行更改。不可能。证明我错了:)

© www.soinside.com 2019 - 2024. All rights reserved.