já reassisti a aula uma 3 vezes e ainda n achei o erro. Quando eu chego na parte de selecionar a marca do carro o codigo não funciona mais rola o seguinte erro java.lang.NullPointerException: Cannot invoke "java.util.List.stream()" because the return value of "br.com.alura.ProjectCars.model.Modelos.modelos()" is null
//principal
package br.com.alura.ProjectCars.principal;
import br.com.alura.ProjectCars.model.Dados; import br.com.alura.ProjectCars.model.Modelos; import br.com.alura.ProjectCars.service.ConsumoApi; import br.com.alura.ProjectCars.service.ConverteDados;
import java.util.Comparator; import java.util.Scanner;
public class Principal {
private Scanner leitura = new Scanner(System.in); private ConsumoApi consumo = new ConsumoApi(); private ConverteDados conversor = new ConverteDados(); private final String URL_BASE = "https://parallelum.com.br/fipe/api/v1";
public void exibeMenu(){
var menu = """
*** OPÇÕES ***
carro
moto
caminhão
Digite uma das opções para consultar:
""";
System.out.println(menu);
var opcao = leitura.next();
String endereco;
if(opcao.toLowerCase().contains("carr")){
endereco = URL_BASE + "/carros/marcas";
} else if (opcao.toLowerCase().contains("mo")) {
endereco = URL_BASE + "/motos/marcas";
}else {
endereco = URL_BASE + "/caminhoes/marcas";
}
var json = consumo.obterDados(endereco);
System.out.println(json);
var marcas = conversor.obterLista(json, Dados.class);
marcas.stream()
.sorted(Comparator.comparing(Dados::codigo))
.forEach(System.out::println);
System.out.println("Informe o codigo da marca");
(o codigo parece funcionar só até aqui *******************************************)
var codigoMarca = leitura.nextLine();
endereco = endereco + "/" + codigoMarca + "/modelos";
json = consumo.obterDados(endereco);
var modeloLista = conversor.obterDados(json, Modelos.class);
System.out.println(modeloLista);
System.out.println("\n Modelos dessa marca ");
modeloLista.modelos().stream()
.forEach(System.out::println);
}
}
ConsumoApi
package br.com.alura.ProjectCars.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 ConsumoApi {
public String obterDados(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 e){
throw new RuntimeException(e);
}catch (InterruptedException e){
throw new RuntimeException(e);
}
String json = response.body();
return json;
}
}
ConverteDados
package br.com.alura.ProjectCars.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 ConsumoApi {
public String obterDados(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 e){
throw new RuntimeException(e);
}catch (InterruptedException e){
throw new RuntimeException(e);
}
String json = response.body();
return json;
}
}
Modelos
package br.com.alura.ProjectCars.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public record Modelos(List modelos) {
}
DADOS
package br.com.alura.ProjectCars.model;
public record Dados(String codigo, String nome) {
}