默认情况下不验证扩展默认值的验证组
Validation groups extending Default not being validated by default
我有以下验证组:
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) {
我可以验证所有字段的唯一方法是在 @Validated 注释中显式添加默认组,如下所示:
@PostMapping("signup")
public String createUser(@Validated({ Default.class, Update.class }) User user,
BindingResult result, Model model, RedirectAttributes redirectAttributes) {
默认情况下,当没有指定组时,是否应该验证所有用组扩展 Default
注释的字段?
我 运行 今天遇到了类似的问题,因此这可能会在将来帮助其他人 - 默认关系以相反的方式工作,如此处解释:
JSR303 Validation Group inheritance
当您使用 @Validated(Update.class)
时,应用的验证属于 Update.class 及其所有继承链,因此在这种情况下 Update.class 和 Default.class 都将申请。
你想做的是相反的方式,即让@Valid 为所有验证组工作。为此,您需要为 class:
重新定义默认组
@GroupSequence({Usuario.class, Update.class})
public class Usuario implements UserDetails
这将允许@Valid 应用所有验证。
我有以下验证组:
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) {
我可以验证所有字段的唯一方法是在 @Validated 注释中显式添加默认组,如下所示:
@PostMapping("signup")
public String createUser(@Validated({ Default.class, Update.class }) User user,
BindingResult result, Model model, RedirectAttributes redirectAttributes) {
默认情况下,当没有指定组时,是否应该验证所有用组扩展 Default
注释的字段?
我 运行 今天遇到了类似的问题,因此这可能会在将来帮助其他人 - 默认关系以相反的方式工作,如此处解释: JSR303 Validation Group inheritance
当您使用 @Validated(Update.class)
时,应用的验证属于 Update.class 及其所有继承链,因此在这种情况下 Update.class 和 Default.class 都将申请。
你想做的是相反的方式,即让@Valid 为所有验证组工作。为此,您需要为 class:
重新定义默认组@GroupSequence({Usuario.class, Update.class})
public class Usuario implements UserDetails
这将允许@Valid 应用所有验证。