Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Código não exibindo corretamente as informações no terminal

Classe principal

import configuraçoes.Busca;

import java.io.IOException;
import java.util.Scanner;

public class Principal {

    public static void main(String[] args) throws IOException, InterruptedException {

        Scanner entrada = new Scanner(System.in);

        String cep = entrada.nextLine();
        Busca busca1 = new Busca(cep);
        busca1.MostraCep();
    }
}

Classe para fazer a requisição

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Busca {

    private String cep;
    private String endereco = "https://viacep.com.br/ws/" + cep + "/json/";

    public Busca(String cep) throws IOException, InterruptedException {
        this.cep = cep;
    }

    public void MostraCep () {
        System.out.println(response.body());
    }

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .build();
    HttpResponse<String> response = client
            .send(request, HttpResponse.BodyHandlers.ofString());
}
1 resposta
solução!

Olá Marcelo!

O problema é que está definindo a request e response como atributos da classe e eles são inicializados antes do atributo CEP (que acontece no construtor). Você pode confirmar isso dando um print da response antes da chamada e vai aparecer algo assim: (GET https://viacep.com.br/ws/null/json/) 400. O mesmo acontece com o atributo endereço, que é inicializado antes do CEP, gerando a response mencionada https://viacep.com.br/ws/null/json/.

Uma das formas de resolver é a seguinte:

public class Busca {

  private String endereco;

  public Busca(String cep) {
    this.endereco = "https://viacep.com.br/ws/" + cep + "/json/";
  }

  public void MostraCep() throws IOException, InterruptedException {
    HttpClient client = HttpClient.newHttpClient();

    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(endereco))
        .build();

    HttpResponse<String> response = client
        .send(request, HttpResponse.BodyHandlers.ofString());

    System.out.println(response.body());
  }
}

Dessa forma, a request só será feita quando chamar o método MostraCep() e o endereço será inicializado no construtor levando em consideração o cep passado como argumento.