默认情况下未验证扩展默认的验证组

时间:2018-10-17 14:13:08

标签: java spring validation bean-validation spring-validator

我有以下验证组:

public class ValidationGroups {

    public interface Create extends Default {}

    public interface Update extends Default {}

}

还有我注释的实体:

public class Usuario implements UserDetails {

    @NotNull(groups = { Update.class })
    @NotBlank(groups = { Update.class })
    @Length(max = 255, groups = { Update.class })
    private String name;

    @NotNull @NotEmpty @Email
    private String email;

}

但是,当我尝试使用默认验证来验证我的实体时,即使字段name显式扩展了Default,字段@Valid也不被验证(用@PostMapping("signup") public String createUser(@Validated User user, BindingResult result, Model model, RedirectAttributes redirectAttributes) { 进行注释一样):

@PostMapping("signup")
public String createUser(@Validated({ Default.class, Update.class }) User user, 
            BindingResult result, Model model, RedirectAttributes redirectAttributes) {

我可以验证所有字段的唯一方法是在@Validated注释中显式添加Default组,如下所示:

Default

默认情况下,在未指定任何组的情况下,是否应验证所有带有扩展{{1}}的组的字段?

1 个答案:

答案 0 :(得分:0)

我今天遇到了类似的问题,因此这可能会在将来对其他人有所帮助-默认关系以相反的方式起作用,如下所述: JSR303 Validation Group inheritance

使用@Validated(Update.class)时,应用的验证是属于Update.class及其所有继承链的验证,因此在这种情况下,Update.class和Default.class都将适用。

您要尝试的是另一种方法,即让@Valid对所有验证组均有效。为此,您需要为您的班级重新定义默认组:

@GroupSequence({Usuario.class, Update.class}) public class Usuario implements UserDetails

这将允许@Valid应用所有验证。