Hibernate-валидатор Группы с Spring MVC
Я использую hibernate-validator 4.3.1 и Spring MVC 3.2.3.
У моего приложения есть бин со следующими свойствами и аннотациями (для простоты я удалил большинство из них):
public class Account {
@NotEmpty(groups = GroupOne.class)
private String name;
@NotEmpty(groups = GroupOne.class)
private Date creationDate;
@NotEmpty(groups = GroupTwo.class)
private String role;
@NotEmpty(groups = GroupTwo.class)
private String profile;
//getters and setters
}
Как показано, существует две группы проверок, потому что приложение имеет форму мастера, состоящую из двух этапов: на первом этапе поля name и creationDate заполняются пользователем, а на втором - поля роли и профиля.
Я добавляю некоторые методы контроллера в качестве примера:
@RequestMapping(value = "/account/stepOne", method = "POST")
public String stepOne(@ModelAttribute @Validated(GroupOne.class) Account account, BindingResult bindingResult) {
//Implementation
}
@RequestMapping(value = "/account/stepTwo", method = "POST")
public String stepTwo(@ModelAttribute @Validated(GroupTwo.class) Account account, BindingResult bindingResult) {
//Implementation
}
Вышеуказанные методы определяют, какая проверка должна применяться аннотацией @Validated.
До сих пор все работало нормально, но у меня есть некоторые проблемы, когда я хочу использовать этот компонент в другой форме. Эта форма отображает все поля компонента, и метод контроллера, который получает отправку, выглядит следующим образом:
@RequestMapping(value = "/account/stepOne", method = "POST")
public String stepOne(@ModelAttribute @Validated Account account, BindingResult bindingResult) {
//Implementation
}
Как вы можете видеть, имя группы было удалено из аннотации @Validated, потому что я хочу применить все проверки, определенные в компоненте Account.
Однако это не сработало, и единственный способ заставить его работать - добавить группу Default в свойства bean-компонента, как показано ниже:
public class Account {
@NotEmpty(groups = {GroupOne.class, Default.class})
private String name;
@NotEmpty(groups = {GroupOne.class, Default.class})
private Date creationDate;
@NotEmpty(groups = {GroupTwo.class, Default.class})
private String role;
@NotEmpty(groups = {GroupTwo.class, Default.class})
private String profile;
//getters and setters
}
Есть ли более элегантный способ добиться этого?