Spring MVC和@Validate:仅在特定条件下或用户更改属性时执行验证

控制器方法期望一个@NotNull @Valid @ModelAttribute PersonPerson有一个@Valid Address

address属性。

开启时,PersonController.create(@NotNull @Valid @ModelAttribute Person person,

BindingResult bindingResult...)仅当用户设置地址的任何字段或基于人员实例的字段值(例如person.hasAddress =

true)时,我才需要验证person.address。

问题是默认情况下spring会创建一个Address的新实例,该实例在createForm commit上提交,但在验证时失败。

我在Person中创建了一个跨属性验证,该验证要求在hasAddress = true的情况下地址不能为null,但是无法解决地址字段中验证的问题。

我尝试使用@InitBinder("address")/

@InitBinder("person.address")进行设置,binder.setAutoGrowNestedPaths(false);但无法接通此电话。全局使用@InitBinder会导致其他属性出现其他问题。

我在考虑组,但是只有在知道开发​​时间时才可以使用,如果您不愿进行验证。就我而言,将基于对地址或hasAddress字段的任何更改在提交时知道

任何的想法?

回答:

  1. @Valid从地址字段中删除了
  2. 手动进行验证:在create控制器的方法内部:validateAddressIfNeeded(person, bindingResult)
    private void validateAddressIfNeeded(Person person, BindingResult bindingResult) {

    if (person.hasAddress()) {

    bindingResult.pushNestedPath("address");

    validator.validate(person.getAddress(), bindingResult);

    bindingResult.popNestedPath();

    }

    }

以上是 Spring MVC和@Validate:仅在特定条件下或用户更改属性时执行验证 的全部内容, 来源链接: utcz.com/qa/430391.html

回到顶部