gpt4 book ai didi

spring - 嵌套验证组,Spring,JSR 303

转载 作者:行者123 更新时间:2023-12-03 13:44:08 25 4
gpt4 key购买 nike

我正在尝试在我的 Spring 应用程序中进行嵌套验证。

public class Parent{

public interface MyGroup{}

@NotNull(groups = MyGroup.class)
private Child child;

// getters and setters omited

}

public class Child{

public interface OptionalGroup {}

@NotBlank(groups = OptionalGroup.class)
private String aField;

}

我已经从 javax.validation 包中查看了 @Valid 但它不支持组。我还检查了 spring 中的 @Validated 注释,但我无法将其应用于字段。

我想做类似的事情:
public class Parent{

public interface MyGroup{}

@NotNull(groups = MyGroup.class)
@CascadeValidate(groups = MyGroup.class, cascadeGroups = OptionalGroup.class)
// 'groups' correspond to parent group and 'cascadeGroups' to a group that needs to be apply to the Child field.

private Child child;

}

然后我可以务实地做任何我想做的事情:
@Inject SmartValidator validator;

public void validationMethod(Parent parent, boolean condition) throws ValidationException {
if(condition){
MapBindingResult errors= new MapBindingResult(new HashMap<>(), target.getClass().getSimpleName());

validator.validate(parent, errors, Parent.MyGroup.class); // validate all constraints associated to MyGroup

if(errors.hasErrors()) throw new ValidationException(errors); // A custom exception
}

}

任何想法如何做到这一点?

非常感谢

最佳答案

我终于找到了解决方案。其实我误会了什么@Valid是为。

关键是为 Parent 和 child 属性声明相同的组。

解决方案 :

public class Parent{

public interface MyGroup{}

@NotNull(groups = MyGroup.class)
@Valid // This annotation will launch nested validation
private Child child;

// getters and setters omited

}

public class Child{

@NotBlank(groups = Parent.MyGroup.class) // Declare same group
private String aField;

}

在这种情况下,当我这样做时:
 @Inject SmartValidator validator;

public void validationMethod(Parent parent, boolean condition) throws ValidationException {
if(condition){
MapBindingResult errors= new MapBindingResult(new HashMap<>(), target.getClass().getSimpleName());

// validate all constraints associated to MyGroup (even in my nested objects)
validator.validate(parent, errors, Parent.MyGroup.class);

if(errors.hasErrors()) throw new ValidationException(errors); // A custom exception
}

}

如果在我的子字段“aField”中检测到验证错误,第一个关联的验证错误代码(请参阅 FieldError.codes)将是“NotBlank.Parent.afield”。

我应该检查一下 @Valid文档。

关于spring - 嵌套验证组,Spring,JSR 303,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32436463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com