Chaturmind
LearnDSASystem DesignBlogPremium
Sign inGet started
Chaturmind

Structured learning paths for engineers who want to go deep. Written by practitioners.

Learn

  • Java
  • DSA
  • System Design
  • Spring Boot
  • AI / ML

Company

  • Blog
  • Premium
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 Chaturmind. All rights reserved.

Built for engineers who want to go deep.


← Spring Boot REST API Development

Spring Boot Basics

  • What is Spring Boot?
  • Dependency Injection
  • Building REST Controllers

Validation & Error Handling

  • Bean Validation with @Valid
  • Global Exception Handling

Data & Persistence

  • Spring Data MongoDB
Chaturmind
← Spring Boot REST API Development

Spring Boot Basics

  • What is Spring Boot?
  • Dependency Injection
  • Building REST Controllers

Validation & Error Handling

  • Bean Validation with @Valid
  • Global Exception Handling

Data & Persistence

  • Spring Data MongoDB
HomeLearnSpring BootSpring Boot REST API DevelopmentValidation & Error Handling
✓ FreeIntermediate· 10 min read

Bean Validation with @Valid

@NotBlank, @Size, @Valid — validate request bodies without boilerplate.

Published February 8, 2025


Bean Validation in Spring Boot

Spring Boot integrates with the Jakarta Bean Validation API (formerly javax.validation). Add spring-boot-starter-validation and annotate your request objects.

Request DTO with constraints

public record CreateUserRequest(
    @NotBlank(message = "Name is required")
    String name,

    @Email(message = "Must be a valid email")
    @NotBlank
    String email,

    @Size(min = 8, message = "Password must be at least 8 characters")
    @NotBlank
    String password,

    @Min(18) @Max(120)
    int age
) {}

Triggering validation

@PostMapping("/users")
@ResponseStatus(HttpStatus.CREATED)
public UserDto createUser(@RequestBody @Valid CreateUserRequest request) {
    // if validation fails, MethodArgumentNotValidException is thrown
    return userService.create(request);
}

Handling validation errors globally

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public Map<String, Object> handleValidationErrors(MethodArgumentNotValidException ex) {
        Map<String, String> fieldErrors = ex.getBindingResult()
            .getFieldErrors()
            .stream()
            .collect(Collectors.toMap(
                FieldError::getField,
                e -> e.getDefaultMessage() != null ? e.getDefaultMessage() : "Invalid value"
            ));
        return Map.of(
            "status", 400,
            "error", "Validation Failed",
            "errors", fieldErrors
        );
    }
}

Common constraints

AnnotationDescription
@NotNullMust not be null
@NotBlankMust not be null, empty, or whitespace
@NotEmptyMust not be null or empty
@Size(min, max)String/collection length range
@Min / @MaxNumeric bounds
@EmailValid email format
@Pattern(regexp)Matches regex
@PositiveNumber > 0
@Future / @PastDate constraint

Custom constraint

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = SlugValidator.class)
public @interface ValidSlug {
    String message() default "Must be a valid slug (lowercase, hyphens only)";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Interview Tip

Annotate your DTOs, trigger with @Valid at the controller, handle MethodArgumentNotValidException in a @RestControllerAdvice. This shows you understand the Spring validation pipeline end-to-end.

Previous

Building REST Controllers

Next

Global Exception Handling

AI Tutor

Lesson: Bean Validation with @Valid

Quick actions

AI responses can be inaccurate. Verify critical information.