Você pode usar a classe Assert do Spring (org.springframework.util.Assert) para validar os parâmetros no próprio construtor e evitar que o objeto seja criado com valores inválidos.  
  
  
  🔹 Exemplo com Assert no Construtor
import org.springframework.util.Assert;
import java.time.Instant;
public class Autor {
    private final String nome;
    private final String email;
    private final String descricao;
    private final Instant instanteCriacao;
    public Autor(String nome, String email, String descricao) {
        Assert.hasText(nome, "O nome é obrigatório");
        Assert.hasText(email, "O email é obrigatório");
        Assert.hasText(descricao, "A descrição é obrigatória");
        Assert.isTrue(descricao.length() <= 400, "A descrição não pode passar de 400 caracteres");
        this.nome = nome;
        this.email = email;
        this.descricao = descricao;
        this.instanteCriacao = Instant.now();
    }
    public String getNome() {
        return nome;
    }
    public String getEmail() {
        return email;
    }
    public String getDescricao() {
        return descricao;
    }
    public Instant getInstanteCriacao() {
        return instanteCriacao;
    }
}
📌 Como Funciona?
- 
Assert.hasText(nome, "O nome é obrigatório")→ Garante que a string não é nula nem vazia.
- 
Assert.isTrue(descricao.length() <= 400, "A descrição não pode passar de 400 caracteres")→ Valida o tamanho da descrição.
Se qualquer uma dessas condições for violada, uma IllegalArgumentException será lançada imediatamente, impedindo a criação do objeto.
🎯 Vantagens
✅ Validação acontece no momento da criação do objeto, garantindo que ele nunca terá um estado inválido.
✅ Não depende de um framework externo, como o Jakarta Validation (@NotBlank, @Size, etc.).
✅ Leve e direto, pois Assert já vem com o Spring Core.
🚀 Comparação com Jakarta Validation
| Método | Quando Usar? | Como Funciona? | 
|---|---|---|
| Assertdo Spring | Se quiser validação imediata e leve | Lança IllegalArgumentExceptionno construtor. | 
| Jakarta Validation ( @NotBlank) | Se quiser integração automática com Spring e @Valid | Precisa de um framework de validação e só ocorre quando validado explicitamente. | 
  
  
  🔹 Quando Usar Assert no Construtor?
💡 Use Assert quando quiser impedir a criação de objetos inválidos diretamente na classe sem depender de validação externa.
💡 Use Jakarta Validation (@NotBlank, @Valid) quando os dados vêm de requisições HTTP e precisam ser validados antes da conversão para entidade.
 

 
    
Top comments (0)