【发布时间】:2014-07-10 15:31:59
【问题描述】:
我正在使用 hibernate-validator 4.3.1 和 Spring MVC 3.2.3。
我的应用程序有一个具有以下属性和注释的 bean(为了简单起见,我删除了大部分):
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
}
如图所示,有两组验证,因为应用程序有一个由两步组成的向导表单:第一步,用户填写名称和创建日期字段,第二步填写角色和个人资料字段。
我添加了一些控制器方法作为例子:
@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 注解必须应用的验证。
到目前为止,一切正常,但是当我想以另一种形式重用该 bean 时,我遇到了一些问题。这个表单显示了bean的所有字段,控制器接收提交的方法如下:
@RequestMapping(value = "/account/stepOne", method = "POST")
public String stepOne(@ModelAttribute @Validated Account account, BindingResult bindingResult) {
//Implementation
}
如您所见,组的名称已从 @Validated 注释中删除,因为我想应用 Account bean 中定义的所有验证。
但是,它不起作用,唯一让它起作用的方法就是将 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
}
有没有更优雅的方法来实现这一点?
【问题讨论】: