Veiculos.java
package br.com.alura.tabelafipe.tabela_fipe.model;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public record Veiculo(
@JsonAlias("Valor") String valor,
@JsonAlias("Marca") String marca,
@JsonAlias("Modelo") String modelo,
@JsonAlias("AnoModelo") int ano,
@JsonAlias("Combustivel") String combustivel
) {
}
CoverteDados.java
package br.com.alura.tabelafipe.tabela_fipe.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ConverteDados{
private ObjectMapper mapper = new ObjectMapper();
public <T> T obterDados(String json, Class<T> classe) {
try {
return mapper.readValue(json, classe);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}
Principal.java
public class Principal {
private final Scanner scanner = new Scanner(System.in);
private final ConsumoApi consumo = new ConsumoApi();
private final ConverteDados converte = new ConverteDados();
private final String ENDERECO = "https://parallelum.com.br/fipe/api/v1/";
public void exibeMenu() {
try {
String input;
int inputInt;
System.out.println("""
***********************
*DIGITE UMA DAS OPÇÕES*
***********************
Carros
Caminhoes
Motos
----------------------
""");
input = scanner.nextLine();
Set<String> permitidos = Set.of("carros", "caminhoes", "motos");
if(!permitidos.contains(input.toLowerCase())){ throw new IllegalArgumentException();}
String enderecoParaMarcas = ENDERECO + input.toLowerCase() + "/marcas/";
String json = consumo.consumir(enderecoParaMarcas);
List<DadosRecebidos> dadosMarcas = List.of(converte.obterDados(json, DadosRecebidos[].class));
dadosMarcas.forEach(System.out::println);
System.out.println("Informe o código da marca para consulta");
inputInt = scanner.nextInt();
scanner.nextLine();
String enderecoParaModelos = enderecoParaMarcas + inputInt + "/modelos/";
String json2 = consumo.consumir(enderecoParaModelos);
ListaModelos listaModelos = converte.obterDados(json2, ListaModelos.class);
listaModelos.modelos().forEach(System.out::println);
System.out.println("Digite um trecho do nome do carro para consulta");
String consulta = scanner.nextLine();
List<DadosRecebidos> consultado = listaModelos.modelos().stream()
.filter(e -> e.descricao().toLowerCase().contains(consulta.toLowerCase()))
.sorted(Comparator.comparingInt(e -> Integer.parseInt(e.codigo())))
.toList();
if (consultado.isEmpty()) {
throw new NoSuchElementException("Nao foi encontrado nenhum veiculo com esse nome");
}
consultado.forEach(System.out::println);
System.out.println("Informe o código do modelo para consulta");
inputInt = scanner.nextInt();
scanner.nextLine();
String enderecoParaAnos = enderecoParaModelos + inputInt + "/anos/";
String json3 = consumo.consumir(enderecoParaAnos);
List<DadosRecebidos> dados = List.of(converte.obterDados(json3, DadosRecebidos[].class));
List<String> codigos = dados.stream()
.map(DadosRecebidos::codigo)
.toList();
List<Veiculo> veiculos = codigos.stream()
.map(codigo -> {
String json4 = consumo.consumir(enderecoParaAnos + codigo);
return converte.obterDados(json4, Veiculo.class);
})
.toList();
System.out.println("\nTodos os veiculos com os valores por ano:");
veiculos.forEach(System.out::println);
} catch (NoSuchElementException | NullPointerException e) {
System.out.println("Não foi encontrado nenhum valor para o input fornecido");
}catch (IllegalArgumentException e){
System.out.println("Argumento invalido, verifique se digitou corretamente!");
}
}
}