@Valid (javax.validation.Valid) не является рекурсивным для типа списка - PullRequest
1 голос
/ 13 июня 2019

Контроллер:

@RequestMapping(...)
public void foo(@Valid Parent p){
}
class Parent {
  @NotNull // javax.validation.constraints.NotNull
  private String name;
  List<Child> children;
}

class Child {
  @NotNull
  private String name;
}

Это вызывает @NotNull для Parent.name, но не проверяет Child.name.Как заставить это вызвать.Я пробовал List<@Valid Child> children; также аннотировать дочерний класс с аннотацией @Valid, не работает.Пожалуйста, помогите.

parent = { "name": null } не удалось.имя не может быть нулевым.

child = { "name": null } работает.

Ответы [ 5 ]

2 голосов
/ 13 июня 2019

Попробуйте добавить,

class Parent {
    @NotNull 
    private String name;

    @NotNull 
    @Valid
    List<Child> children;
}
1 голос
/ 13 июня 2019

Вы пробовали это так:

class Parent {
    @NotNull // javax.validation.constraints.NotNull
    private String name;

    @Valid
    List<Child> children;
}
0 голосов
/ 13 июня 2019

В Bean Validation 2.0 и Hibernate Validator 6.x рекомендуется использовать:

class Parent {
    @NotNull 
    private String name;

    List<@Valid Child> children;
}

Мы поддерживаем @Valid и ограничения в элементах контейнера.

Однако, чтодругие предложили, должны работать.

0 голосов
/ 13 июня 2019

annotate в Parent ваш список с @Valid и добавьте @NotEmpty или @NotBlank или @NotNull к Child. Spring это подтвердит.

class Parent {
    @NotNull // javax.validation.constraints.NotNull
    private String name;

    @Valid
    List<Child> children;
}

class Child {
  @NotNull
  private String name;
}
0 голосов
/ 13 июня 2019

Если вы хотите проверить дочерний элемент, вы должны упомянуть @Valid к самому атрибуту

Родительский класс

class Parent {
  @NotNull // javax.validation.constraints.NotNull
  private String name;

  @NotNull // Not necessary if it's okay for children to be null
  @Valid // javax.validation.Valid
  privateList<Child> children;
}

Детский класс

class Child {
  @NotNull
  private String name;
}
...