扩展默认的验证组不被默认验证

问题描述 投票:0回答:1

我有以下确认团组:

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验证组注释时没有指定的组?

java spring validation bean-validation spring-validator
1个回答
1
投票

我今天碰到了类似的问题,所以这可能帮助其他人在未来的 - 默认关系工作周围的其他方法,如下解释: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适用所有验证。

© www.soinside.com 2019 - 2024. All rights reserved.