使用Spring MVC的Hibernate-validator组

我正在使用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 } 

如图所示,有两组validation,因为应用程序有一个向导forms,由两个步骤组成:第一步,name和creationDate字段由用户填充,第二步是角色和配置文件字段。

我添加一些Controller方法作为示例:

 @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注释必须应用哪些validation。

到目前为止一切正常,但是当我想以另一种forms重用该bean时,我遇到了一些问题。 此表单显示bean的所有字段,接收提交的控制器方法如下:

 @RequestMapping(value = "/account/stepOne", method = "POST") public String stepOne(@ModelAttribute @Validated Account account, BindingResult bindingResult) { //Implementation } 

如您所见,该组的名称已从@Validated注释中删除,因为我想应用Account bean中定义的所有validation。

但是,它不起作用,使其工作的唯一方法是将默认组添加到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 } 

是否有更优雅的方式来实现这一目标?

没有更优雅的方式。 在不指定组的情况下进行validation将validation默认组。 因此,您必须按照描述添加它。 唯一的另一种选择是通过@Validated({GroupOne.class, GroupTwo.class})显式validation您感兴趣的所有组。 我想这是你喜欢的味道问题。

你可以使用@Valid

 public ModelAndView myMethod(@ModelAttribute @Valid MyDto myDto, BindingResult result){ if(result.hasErrors()){ .... } 

如果使用Default扩展Group Interface,它应该自行处理。

喜欢

 public interface Group1 extends Default {}