1
resposta

Projeto Tabela Fipe

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);
        }

    }

}
1 resposta

Oi, Guilherme! Tudo bem?

Ótimo código! Espero que continue a explorar os conteúdos para ampliar seu conhecimento e desenvolver novas habilidades. Caso tenha restado alguma dúvida em relação a qualquer conteúdo do curso ou atividade, não hesite em perguntar, estou disponível e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!