1
resposta

Null pointer no metodo inclui endereçco

Como vc trataria o Null pointer no metodo inclui endereço?

1 resposta

Olá tudo bem?
Pergunta bem interessante!
Qual propósito?
Vou lhe passar algumas abordagens para você analisar.
Eu trataria NullPointerException no método incluiEndereco de forma preventiva, não reativa.
A ideia é evitar que o null entre no fluxo inválido, em vez de cercar tudo com try/catch.
Exemplo :

public void incluiEndereco(Cliente cliente) {
    String cidade = cliente.getEndereco().getCidade();
    repository.salvar(cliente);
}

Aqui existem vários pontos possíveis de null:

  • cliente
  • cliente.getEndereco()
  • cliente.getEndereco().getCidade()

Exemplos:

  1. Validar entrada logo no início
public void incluiEndereco(Cliente cliente) {

    Objects.requireNonNull(cliente, "Cliente não pode ser nulo");
    Objects.requireNonNull(cliente.getEndereco(), "Endereço não pode ser nulo");

    repository.salvar(cliente);
}

Isso falha rápido (“fail fast”) e deixa claro o motivo.

  1. Validar domínio antes de chegar no método
    Se estiver usando Spring + Bean Validation:
public class ClienteDTO {

    @NotNull
    private EnderecoDTO endereco;
}

E no controller:

@PostMapping
public ResponseEntity<?> salvar(@Valid @RequestBody ClienteDTO dto) {
    service.incluiEndereco(dto);
}

Assim o método de negócio já recebe dados válidos.

  1. Evitar encadeamento inseguro
    Evite:
cliente.getEndereco().getCidade().toUpperCase()

Prefira:

Endereco endereco = cliente.getEndereco();

if (endereco == null) {
    throw new RegraNegocioException("Endereço obrigatório");
}

String cidade = endereco.getCidade();

Melhora:

  • legibilidade
  • debug
  • rastreabilidade
  1. Optional: usar com moderação
    Optional pode ajudar em leitura:
Optional.ofNullable(cliente)
        .map(Cliente::getEndereco)
        .map(Endereco::getCidade)
        .orElseThrow(() -> new RegraNegocioException("Cidade obrigatória"));

Mas eu evitaria excesso disso em regra de negócio porque pode ficar menos legível do que if.

  1. Nunca esconder NullPointerException
    Eu NÃO faria isso:
try {
   cliente.getEndereco().getCidade();
} catch (NullPointerException e) {
   return;
}

Porque:

  • mascara erro de modelagem
  • dificulta debugging
  • cria comportamento silencioso
  • pode salvar dados inconsistentes
  1. Em sistemas grandes: modelagem defensiva
    Se endereço é obrigatório, o objeto já deveria nascer válido:
public class Cliente {

    private final Endereco endereco;

    public Cliente(Endereco endereco) {
        this.endereco = Objects.requireNonNull(endereco);
    }
}

Isso reduz enormemente NPE no sistema inteiro.

Estratégia prática em projetos enterprise
Ordem :

  • Bean Validation (@NotNull)
  • Fail fast (Objects.requireNonNull)
  • Regras de domínio explícitas
  • Objetos imutáveis quando possível
  • Evitar null como estado válido
  • Logs úteis com contexto

Exemplo final :

public void incluiEndereco(Cliente cliente) {

    Objects.requireNonNull(cliente, "Cliente é obrigatório");

    Endereco endereco = Objects.requireNonNull(
        cliente.getEndereco(),
        "Endereço é obrigatório"
    );

    if (endereco.getCep() == null || endereco.getCep().isBlank()) {
        throw new RegraNegocioException("CEP obrigatório");
    }

    repository.salvar(cliente);
}

Esse tipo de abordagem:

  • evita NPE
  • documenta regras
  • facilita manutenção
  • melhora observabilidade
  • reduz bugs ocultos em produção

Finalizando, trataria o NullPointerException no método incluiEndereco de maneira preventiva e orientada ao domínio da aplicação.
A prioridade não seria “capturar o erro”, mas impedir que estados inválidos cheguem à regra de negócio.
Para isso, combinaria validações de entrada (@NotNull, Objects.requireNonNull), modelagem consistente das entidades e verificações explícitas das regras obrigatórias.
Essa abordagem torna o código mais seguro, legível e sustentável, além de facilitar manutenção, debugging e evolução do sistema.
Em projetos corporativos, evitar null desde a origem normalmente reduz muito incidentes em produção e melhora a qualidade geral da aplicação.
Analisa ai com cuidado e envia um feedback.
Bons estudos.