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
- Validação de beans: @NotNull, @Size, @Pattern
- Anotações de restrição personalizadas
- Tratamento global de exceções com @ControllerAdvice
- Detalhes de problemas RFC 7807 e respostas de erro consistentes