Classe com o Código Principal:
`package cesar.mendonca.guilherme.tabela_fip.principal;
import cesar.mendonca.guilherme.tabela_fip.model.*;
import cesar.mendonca.guilherme.tabela_fip.service.ConverteDados;
import cesar.mendonca.guilherme.tabela_fip.service.RequisicaoHttp;
import java.util.*;
public class Principal {
private Scanner scanner = new Scanner(System.in);
private RequisicaoHttp consumo = new RequisicaoHttp();
private ConverteDados conversor = new ConverteDados();
public void exibeMenu() {
System.out.println("**** OPÇÕES ****\nCarro\nMoto\nCaminhão");
System.out.println("\nDigite uma das opções para consultar valores:");
var consulta = scanner.nextLine();
var json = consumo.requisicaoTransporte(consulta);
var marcas = conversor.obterLista(json, Dados.class);
marcas.stream()
.sorted(Comparator.comparing(Dados::codigo))
.forEach(System.out::println);
System.out.println("Informe o código da marca para consulta: ");
consulta = scanner.nextLine();
json = consumo.requisicaoMarca(consulta);
var modeloLista = conversor.obterDados(json, Modelo.class);
modeloLista.modelos()
.stream()
.sorted(Comparator.comparing(Dados::codigo))
.forEach(System.out::println);
System.out.println("Digite um trecho do nome do veículo para consulta:");
String comeco = scanner.nextLine();
modeloLista.modelos().stream()
.filter(m -> m.nome().toLowerCase().startsWith(comeco.toLowerCase()))
.forEach(System.out::println);
System.out.println("Digite o código do modelo para consultar valores:");
consulta = scanner.nextLine();
json = consumo.requisicaoModelo(consulta);
var anos = conversor.obterLista(json, Dados.class);
json = consumo.requisicaoAno(anos);
var veiculos = conversor.obterLista(json, Veiculo.class);
veiculos.forEach(System.out::println);
}
}
`
Classe de Consumo da Api:
package cesar.mendonca.guilherme.tabela_fip.service;
import cesar.mendonca.guilherme.tabela_fip.model.Dados;
import lombok.Getter;
import lombok.Setter;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
public class RequisicaoHttp {
private String transporte;
private String marca;
private String modelo;
private String resposta;
private final String ENDERECO = "https://parallelum.com.br/fipe/api/v1/";
private ConverteDados conversor;
private HttpClient client = HttpClient.newHttpClient();
public String requisicaoTransporte (String transporte) {
this.setTransporte(transporte);
this.resposta = requisicaoHttp(this.ENDERECO + this.getTransporte() + "s/marcas");
return resposta;
}
public String requisicaoMarca (String marca) {
this.setMarca(marca);
this.resposta = requisicaoHttp(this.ENDERECO + this.getTransporte() + "s/marcas/"
+ this.getMarca() + "/modelos");
return resposta;
}
public String requisicaoModelo (String modelo) {
this.setModelo(modelo);
this.resposta = requisicaoHttp(this.ENDERECO + this.getTransporte() + "s/marcas/"
+ this.getMarca() + "/modelos/" + this.getModelo() + "/anos");
return resposta;
}
public String requisicaoAno(List<Dados> anos) {
List<String> listaJson = new ArrayList<>();
for (Dados a:anos) {
this.resposta = requisicaoHttp(this.ENDERECO + this.getTransporte() + "s/marcas/"
+ this.getMarca() + "/modelos/" + this.getModelo() + "/anos/" + a.codigo());
listaJson.add(resposta);
}
return listaJson.toString();
}
public void setTransporte(String transporte) {
if (transporte.equalsIgnoreCase("caminhao")) {
transporte = "caminhoe";
}
this.transporte = transporte.toLowerCase();
}
public String requisicaoHttp(String endereco) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
try {
return this.client.send(request, HttpResponse.BodyHandlers.ofString()).body();
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
}