0Pricing
Java Academy · Aula

Validação de beans: @NotNull, @Size, @Pattern

Anote DTOs com restrições de Bean Validation e acione a validação com @Valid nos controladores.

Validação de beans: @NotNull, @Size, @Pattern é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

O que é a validação de beans?

A validação de beans (Jakarta Bean Validation 3.0) fornece anotações declarativas de restrições para beans Java. O Spring Boot configura automaticamente um validador e o aciona por meio de @Valid ou @Validated.

@NotNull, @NotEmpty, @NotBlank

@NotNull: o valor não pode ser nulo. @NotEmpty: não pode ser nulo nem vazio (em strings ou coleções). @NotBlank: não pode ser nulo, vazio ou conter apenas espaços em branco. Prefira @NotBlank para strings.

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

@Size e @Length

@Size(min, max) restringe o tamanho de strings, coleções, mapas e arrays. @Length (Hibernate) funciona apenas com strings. Prefira @Size para obter portabilidade.

@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

Restrições numéricas: @Min/@Max para limites exatos, @Positive/@PositiveOrZero para restrições de sinal e @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 validação com expressões regulares

@Pattern(regexp) valida strings usando uma expressão regular. É útil para números de telefone, códigos postais e 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 e @URL

@Email valida o formato de e-mail (RFC 5321 básico). @URL (Hibernate) valida o formato de URL. Sempre combine essas anotações com @NotBlank, pois elas permitem valores nulos.

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

@Past, @Future, @PastOrPresent

As restrições temporais validam valores de data e hora. Funcionam com LocalDate, LocalDateTime, Instant e outros tipos.

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

Acionando a validação com @Valid

Adicione @Valid a um parâmetro de método de um controlador. O Spring valida o objeto e lança MethodArgumentNotValidException em caso de falha, retornando uma resposta de solicitação inválida 400.

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

Validação em cascata com @Valid nos campos

Para validar objetos aninhados, anote o campo com @Valid, além de usar as restrições no nível da classe.

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

Grupos de validação

Use grupos para aplicar restrições diferentes em contextos diferentes (por exemplo, criação e atualização). Anote com a interface do grupo e acione a validação com @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) { ... }

Lendo erros de validação

Capture MethodArgumentNotValidException em um @ControllerAdvice para extrair erros de campo e criar respostas de erro estruturadas.

@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);
}

Verificação rápida

Qual anotação valida que uma String não é nula AND não está em branco (e não contém apenas espaços em branco)?

Recapitulação

Anote os DTOs com restrições de validação de beans. Adicione @Valid nos controladores para acionar a validação. Use @NotBlank para strings, @Size para comprimentos, @Pattern para expressões regulares e @Past/@Future para datas. Trate os erros em @ControllerAdvice.

Perguntas Frequentes

A aula “Validação de beans: @NotNull, @Size, @Pattern” é grátis?

Sim — o texto completo de “Validação de beans: @NotNull, @Size, @Pattern” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Validação de beans: @NotNull, @Size, @Pattern”?

Anote DTOs com restrições de Bean Validation e acione a validação com @Valid nos controladores. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Validação de beans: @NotNull, @Size, @Pattern”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Validação de beans: @NotNull, @Size, @Pattern
  2. Anotações de restrição personalizadas
  3. Tratamento global de exceções com @ControllerAdvice
  4. Detalhes de problemas RFC 7807 e respostas de erro consistentes
← Voltar para Java Academy