Я пытаюсь выполнить вложенную проверку в приложении Spring.Вложенные группы проверки, Spring, JSR 303
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;
}
Я уже посмотрел на @Valid из пакета javax.validation, но он не поддерживает группу. Я также проверил @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' предназначен для указания, какие группы использовать при проверке. Поэтому при отправке формы из Интернета проверяйте только те группы, которые указаны. Вы можете указать 0 или более групп для проверки. –
Да, я не могу достичь того, что хочу с этой аннотацией, но я говорил об этом из-за своей философии. Мой вопрос не связан с формами или веб-сайтами, а только с каскадными группами валидации. –
Это действительно связано с Spring, но о том, как работает проверка валов. Весна ничего не добавляет к этому. –