1
resposta

[Projeto] Desafio final

Meu código para o desafio final com todas as classes, foi muito divertido e gratificante conseguir realizar esse desafio.

package zanotelli.fipe.main;

import zanotelli.fipe.model.Dados;
import zanotelli.fipe.model.ModeloCarro;
import zanotelli.fipe.model.Modelos;
import zanotelli.fipe.service.DataConverter;
import zanotelli.fipe.service.GetRequest;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Principal {

    Scanner scanner = new Scanner(System.in);
    final String ENDERECO_BASE = "https://parallelum.com.br/fipe/api/v1/";

    public void Main() {
        System.out.println("****************\n");
        System.out.println("Escolha o tipo de veículo que está buscando");
        System.out.println("Carro\nMoto\nCaminhão\n");
        System.out.println("****************");

        String escolha = scanner.nextLine();

        String busca;
        if(escolha.toLowerCase().contains("carr")) {
            busca = ENDERECO_BASE+"carros/marcas/";
        } else if(escolha.toLowerCase().contains("moto")) {
            busca = ENDERECO_BASE+"motos/marcas/";
        } else {
            busca = ENDERECO_BASE+"caminhoes/marcas/";
        }


        var json = GetRequest.Request(busca);

        var marcas= DataConverter.listConvert(json, Dados.class);
        marcas.forEach(m -> System.out.println("Marca: " + m.nome() + ", Código: ["+m.codigo()+"]"));

        System.out.println("\nDigite o código da marca que deseja buscar: ");
        escolha = scanner.nextLine();
        busca = busca + escolha +"/modelos/";
        json = GetRequest.Request(busca);

        var modelosLista = DataConverter.dataConvert(json,Modelos.class);
        modelosLista.modelos()
                .forEach(m -> System.out.println("Modelo: " + m.nome() + ", Código: ["+m.codigo()+"]"));

        System.out.println("\nDigite o código do modelo que você deseja: ");
        escolha = scanner.nextLine();
        busca = busca + escolha +"/anos/";
        json = GetRequest.Request(busca);

        var modelosCarros = DataConverter.listConvert(json, Dados.class);
        List<String> CodigoModelos = modelosCarros.stream()
                .map(Dados::codigo).toList();
        List<ModeloCarro> carrosModelos = new ArrayList<>();
        for(String c : CodigoModelos) {
            json = GetRequest.Request(busca +c);
            var carros = DataConverter.dataConvert(json, ModeloCarro.class);
            carrosModelos.add(carros);
        }
        carrosModelos.forEach(c -> System.out.println(
                "Modelo: " + c.Modelo() +
                ", Marca: " + c.Marca() + ", Valor: " + c.Valor() + ", Combustivel: " + c.Combustivel() +
                        ", Ano: " + c.AnoModelo()
        ));
    }
}

Classe de Request com metodo estatico

package zanotelli.fipe.service;

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 GetRequest {
    public static String Request(String endereco) {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();
        HttpResponse<String> response = null;
        try {
            response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
        }
         catch(IOException | InterruptedException e) {
             throw new RuntimeException(e);
         }

        return response.body();
        }
}

Classe conversora

package zanotelli.fipe.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;

import java.util.List;

public class DataConverter  {
    private static ObjectMapper mapper = new ObjectMapper();

    static public <T> T dataConvert(String json, Class<T> classe) {
        try {
            return mapper.readValue(json,classe);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    static public <T> List<T> listConvert(String json, Class<T> classe) {
        CollectionType lista = mapper.getTypeFactory()
                .constructCollectionType(List.class, classe);
        try {
            return mapper.readValue(json,lista);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

Optei por não utilizar as interfaces e sim metodos estaticos

1 resposta

Oi, Daniel! Tudo bem?

Ótimo código, parabéns! 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!