Почему аннотация @Valid не работает при использовании внутри аргумента метода службы, но работает для метода контроллера?

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

@Getter @Setter
public class UserDto{

  @NotEmpty(message = "Name cannot be empty")
  private String name;

  @NotNull(message = "Provide a valid age")
  private Integer age;

}

У меня есть некоторые требования, по которым я не могу выполнить проверку метода контроллера, но мне нужно сделать это для метода службы.

@PostMapping(value = "/user")
public void create(@RequestBody UserDto user){
  userService.create(user);
}

public void create(@Valid UserDto user){
  System.out.println(user);
}

Но это не работает. И если я добавлю @Valid к методу контроллера, я получу ошибки проверки, как и ожидалось.

Почему так? Связана ли сериализация / десериализация с валитизацией?


person TheCoder    schedule 15.12.2019    source источник
comment
Отвечает ли это на ваш вопрос? Как вручную запустить весеннюю проверку?   -  person Matt U    schedule 15.12.2019
comment
Не тестировали, но, возможно, это также работает:   -  person pirho    schedule 15.12.2019
comment
@MattU Зачем мне запускать его вручную? Это надо делать само.   -  person TheCoder    schedule 15.12.2019
comment
@pirho Нет, такая же проблема   -  person TheCoder    schedule 15.12.2019
comment
Нет. Проверочные аннотации обрабатываются веб-уровнем (контроллером), когда присутствует @Valid, потому что он настроен для этого. Фреймворк ничего не знает о слое обслуживания, только о веб-слое. Сама аннотация, так сказать, не там, где происходит волшебство.   -  person Matt U    schedule 16.12.2019
comment
Спасибо. Запуск проверки вручную решил проблему.   -  person TheCoder    schedule 16.12.2019