Beanvalidation组序列不起作用

我正在使用spring 4.1,hibernatevalidation器5.1.3进行我的项目。 我一直试图让GroupSequence从最近2天开始工作。 我已经提到了validation文档,博客和stackoverflow上发布的一些问题。

请看下面的课程。 当我从注释中删除GroupSequence和groups时,所有validation消息都会出现在一起,即对名称和其他字段的所有检查都会一起触发。 让我们说名字字段 – 我想首先validation@NotBlank和@Size,然后名称应该与模式匹配,最后由于数据库调用应该检查@UniqueName。

为此,我按照文档和答案中的建议创建了GroupSequence。 但是当触发validation时,只会为名称触发@NotBlank和@Size。 当我从剩余的注释中删除组值时,它们开始工作但是所有错误消息都会立即显示,这是我不想要的。

我希望使用组指定的注释First.class在Second.classvalidation之前一起触发。 我不明白为什么用group指定的validation没有被解雇。

有人可以指导我。


@GroupSequence({MyForm.class, OrderedChecks.class}) public class MyForm { @NotBlank @Size(min = 2, max = 40) @Pattern(regexp = "^[\\p{Alnum} ]+$", groups = First.class) @UniqueName(groups = Second.class)//Custom validation private String name; @NotBlank @Size(min = 2, max = 40) private String url; @NotBlank @Size(max = 100) private String imagePath; //Custom Validation @CheckContent(acceptedType = , allowedSize=, dimensions= groups = Second.class) private MultipartFile image ... } @GroupSequence(value = {Default.class, First.class, Second.class}) public interface OrderedChecks {} @Controller @RequestMapping(value = "/myForm") public class MyFormController { @RequestMapping(method = POST) public String completeSignUp(@Valid @ModelAttribute("myForm") final MyForm myForm, BindingResult result, RedirectAttributes redirectAttributes, Model model) { if(result.hasErrors()) { model.addAttribute(companyDetailsForm); //ERROR_VIEW="myForm"; return ERROR_VIEW; } // Doing something else. return ; } } 

使用Spring的@Validated而不是@Valid 。 这将允许您指定组并控制序列。

将您的控制器方法更改为:

 @RequestMapping(method = POST) public String completeSignUp(@Validated(OrderedChecks.class) @ModelAttribute("myForm") final MyForm myForm, BindingResult result, RedirectAttributes redirectAttributes, Model model) { ... } 

请注意,在MyForm bean之上不需要@GroupSequence({MyForm.class, OrderedChecks.class})