[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-kak-rabotaet-validatsiya-v-spring-chto-takoe-valid-i-validated":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},647,"kak-rabotaet-validatsiya-v-spring-chto-takoe-valid-i-validated",14,"spring","Spring","🌱","Как работает валидация в Spring? Что такое @Valid и @Validated?","Spring интегрирует Bean Validation API (JSR 380) через Hibernate Validator для декларативной валидации данных. Аннотация `@Valid` перед `@RequestBody` активирует проверку.\n\n### Основные аннотации валидации\n\n```java\npublic class CreateUserRequest {\n    @NotBlank(message = \"Имя не может быть пустым\")\n    @Size(min = 2, max = 100)\n    private String firstName;\n\n    @NotBlank @Email\n    private String email;\n\n    @NotNull @Min(18) @Max(150)\n    private Integer age;\n\n    @Positive\n    private BigDecimal balance;\n\n    @Pattern(regexp = \"^\\\\+7\\\\d{10}$\")\n    private String phone;\n\n    @Past\n    private LocalDate birthDate;\n\n    @Valid @NotNull \u002F\u002F каскадная валидация вложенного объекта\n    private AddressDto address;\n}\n```\n\n### Применение\n\n```java\n@PostMapping\npublic ResponseEntity\u003CUserDto> createUser(@Valid @RequestBody CreateUserRequest request) {\n    \u002F\u002F Если валидация не пройдена -- MethodArgumentNotValidException (400)\n    return ResponseEntity.status(HttpStatus.CREATED).body(userService.create(request));\n}\n```\n\n### @Valid vs @Validated\n\n| Аспект | @Valid (javax) | @Validated (Spring) |\n|--------|---------------|---------------------|\n| Группы валидации | Нет | Да |\n| На уровне класса | Нет | Да |\n| Каскадная валидация | Да | Да |\n\n### Группы валидации\n\n```java\npublic interface OnCreate {}\npublic interface OnUpdate {}\n\npublic class UserRequest {\n    @Null(groups = OnCreate.class)\n    @NotNull(groups = OnUpdate.class)\n    private Long id;\n}\n\n@PostMapping\npublic UserDto create(@Validated(OnCreate.class) @RequestBody UserRequest request) { }\n\n@PutMapping(\"\u002F{id}\")\npublic UserDto update(@Validated(OnUpdate.class) @RequestBody UserRequest request) { }\n```\n\n> **На собеседовании:** ключевое -- разница между `@Valid` и `@Validated` (группы валидации). Частая ошибка -- забыть `@Valid` перед `@RequestBody` (валидация не выполнится). Также -- не добавить `spring-boot-starter-validation` (в Spring Boot 3 он не входит в starter-web).","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Как работает валидация в Spring? Что такое @Valid и @Validat — Gymterview","Spring интегрирует Bean Validation API (JSR 380) через Hibernate Validator для декларативной валидации данных. Аннотация `@Valid` перед `@RequestBody` активируе","Spring интегрирует Bean Validation API (JSR 380) через Hibernate Validator для декларативной валидации данных. Аннотация",[7,13],"Spring интегрирует Bean Validation API (JSR 380) через Hibernate Validator для декларативной валидации данных. Аннотация `@Valid` перед `@RequestBody` активирует проверку.",true]