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



我有以下验证组:

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;
}

但是当我尝试使用默认验证来验证我的实体时,即使它的组显式扩展Default,字段name也不会被验证(用@Valid注释也会这样做(:

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

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

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

默认情况下,当未指定组时,是否应该验证所有带有扩展Default组注释的字段?

我今天遇到了类似的问题,所以这可能会在将来对其他人有所帮助 - 默认关系则相反,如下所述: JSR303 验证组继承

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

您尝试做的是相反的方式,即让@Valid适用于所有验证组。为此,您需要重新定义类的默认组:

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

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

最新更新