0Pricing
Java Academy · Lección

Validación de beans: @NotNull, @Size, @Pattern

Anote DTO con restricciones de Bean Validation y active la validación con @Valid en los controladores.

Validación de beans: @NotNull, @Size, @Pattern es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

¿Qué es Bean Validation?

Bean Validation (Jakarta Bean Validation 3.0) proporciona anotaciones declarativas de restricciones para los beans de Java. Spring Boot configura automáticamente un validador y lo activa mediante @Valid o @Validated.

@NotNull, @NotEmpty, @NotBlank

@NotNull: el valor no debe ser null. @NotEmpty: no debe ser null ni estar vacío (cadenas o colecciones). @NotBlank: no debe ser null, estar vacío ni contener únicamente espacios en blanco. Prefiera @NotBlank para las cadenas.

public record CreateUserRequest(
    @NotBlank(message = "Name is required")
    String name,
    @NotBlank @Email
    String email,
    @NotNull
    UserRole role
) {}

@Size y @Length

@Size(min, max) restringe el tamaño de cadenas, colecciones, mapas y arrays. @Length (Hibernate) solo funciona con cadenas. Prefiera @Size por su portabilidad.

@Size(min = 3, max = 50, message = "Name must be 3-50 characters")
private String name;
@Size(min = 1, max = 10, message = "Cart must have 1-10 items")
private List<CartItem> items;

@Min, @Max, @Positive, @Range

Restricciones numéricas: @Min/@Max para límites exactos, @Positive/@PositiveOrZero para restricciones de signo y @DecimalMin/@DecimalMax para BigDecimal.

@Min(1) @Max(100)
private int quantity;
@DecimalMin("0.01") @DecimalMax("99999.99")
private BigDecimal price;
@Positive
private long orderId;

@Pattern para validar expresiones regulares

@Pattern(regexp) valida las cadenas mediante una expresión regular. Resulta útil para números de teléfono, códigos postales y formatos personalizados.

@Pattern(regexp = "^\\+?[1-9]\\d{7,14}$", message = "Invalid phone number")
private String phone;
@Pattern(regexp = "^[A-Z]{2}\\d{5}$", message = "Invalid postal code (e.g. AB12345)")
private String postalCode;

@Email y @URL

@Email valida el formato de correo electrónico (RFC 5321 básico). @URL (Hibernate) valida el formato de las URL. Combínelas siempre con @NotBlank, ya que permiten valores null.

@NotBlank @Email
private String email;
// Hibernate-specific:
@URL(protocol = "https")
private String profileUrl;

@Past, @Future, @PastOrPresent

Las restricciones temporales validan valores de fecha y hora. Funcionan con LocalDate, LocalDateTime, Instant y otros tipos.

@Past(message = "Birth date must be in the past")
private LocalDate birthDate;
@Future(message = "Expiry must be in the future")
private LocalDate expiryDate;

Activar la validación con @Valid

Añada @Valid al parámetro de un método del controlador. Spring valida el objeto y lanza MethodArgumentNotValidException si la validación falla, devolviendo una respuesta 400 Bad Request.

@PostMapping("/users")
public ResponseEntity<UserDto> create(@Valid @RequestBody CreateUserRequest req) {
    User user = userService.create(req);
    return ResponseEntity.status(201).body(UserDto.from(user));
}

Validación en cascada con @Valid en los campos

Para validar objetos anidados, anote el campo con @Valid, además de aplicar las restricciones a nivel de clase.

public record OrderRequest(
    @NotNull @Valid
    AddressRequest shippingAddress, // validates AddressRequest constraints too
    @Valid @NotEmpty
    List<@Valid LineItemRequest> items
) {}

Grupos de validación

Utilice grupos para aplicar distintas restricciones en diferentes contextos (por ejemplo, creación y actualización). Anote con la interfaz del grupo y active la validación con @Validated(CreateGroup.class).

public interface CreateGroup {}
public interface UpdateGroup {}
public record UserRequest(
    @NotBlank(groups = CreateGroup.class) String password,
    @NotNull(groups = UpdateGroup.class)  Long id
) {}
// Controller:
@PutMapping("/{id}")
public UserDto update(@Validated(UpdateGroup.class) @RequestBody UserRequest req) { ... }

Leer los errores de validación

Capture MethodArgumentNotValidException en un @ControllerAdvice para extraer los errores de los campos y crear respuestas de error estructuradas.

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidation(MethodArgumentNotValidException ex) {
    Map<String, String> errors = new LinkedHashMap<>();
    ex.getBindingResult().getFieldErrors().forEach(e ->
        errors.put(e.getField(), e.getDefaultMessage()));
    return ResponseEntity.badRequest().body(errors);
}

Comprobación rápida

¿Qué anotación valida que un String no sea null Y no esté en blanco (no contenga solo espacios)?

Resumen

Anote los DTO con restricciones de Bean Validation. Añada @Valid en los controladores para activar la validación. Utilice @NotBlank para cadenas, @Size para longitudes, @Pattern para expresiones regulares y @Past/@Future para fechas. Gestione los errores en @ControllerAdvice.

Preguntas frecuentes

¿La lección «Validación de beans: @NotNull, @Size, @Pattern» es gratis?

Sí — el texto completo de «Validación de beans: @NotNull, @Size, @Pattern» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Validación de beans: @NotNull, @Size, @Pattern»?

Anote DTO con restricciones de Bean Validation y active la validación con @Valid en los controladores. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Validación de beans: @NotNull, @Size, @Pattern»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Validación de beans: @NotNull, @Size, @Pattern
  2. Anotaciones de restricciones personalizadas
  3. Gestión global de excepciones con @ControllerAdvice
  4. Detalles de problemas RFC 7807 y respuestas de error coherentes
← Volver a Java Academy