我正在尝试在我的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
}
}
有什么想法如何做到这一点吗?非常感谢。
@Validated
用于指定在验证时要使用哪些组。因此,当从 Web 提交表单时,只验证指定的那些组。您可以指定0个或多个组以用于验证。 - M. Deinum