Группы проверки с расширением По умолчанию не проверяется по умолчанию - PullRequest
0 голосов
/ 17 октября 2018

У меня есть следующие группы проверки:

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, если группы не указаны?

1 Ответ

0 голосов
/ 05 февраля 2019

Я столкнулся с подобной проблемой сегодня, так что это может помочь другим в будущем - отношения по умолчанию работают наоборот, как описано здесь: JSR303 Наследование группы проверки

Когдавы используете @Validated(Update.class), применяемые проверки принадлежат Update.class и всей его цепочке наследования, поэтому в этом случае будут применяться и Update.class, и Default.class.

Что вы пытаетесь сделатьнаоборот, то есть продолжайте работать @Valid для всех групп проверки.Для этого вам необходимо переопределить группу по умолчанию для вашего класса:

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

Это позволит @Valid применять все проверки.

...