Srs,
estou fazendo um projeto para consumir as APIs da FIPE, a de marcas funciona mas a de modelos não, estou tomando um erro meio na cara mas não achei a solução ainda....segue
- com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type:
java.util.ArrayList<br.com.magnum.fipe.model.Modelo>
from Object value (tokenJsonToken.START_OBJECT
) at [Source: (String)"{"modelos":[{"codigo":655,"nome":"Aerostar Mini-Van 3.8"},{"codigo":656,"nome":"Aspire 1.3"},{"codigo":657,"nome":"Belina GL 1.8 / 1.6"},....
Quandou vou converter o json com o método abaixo, estoura o erro acima:
public <T> List<T> obterLista(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);
}
}
- Quando mudo para outro método que não retorna uma lista, não preenche os campos do objeto Modelo:
id = null codigo = null nome = null
@Override
public <T> T obterDados(String json, Class<T> classe) {
try {
return mapper.readValue(json, classe);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
**Codigo que converte json e salva:**
var modeloLista = converte.obterDados(json, Modelo.class);
repository.save(modeloLista);
java.sql.SQLIntegrityConstraintViolationException: Column 'codigo' cannot be null
Meu objeto Modelo.java
@Entity @Table(name = "modelos") @JsonIgnoreProperties(ignoreUnknown = true) public class Modelo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long codigo;
private String nome;
public Modelo() {
}
public Modelo(List<Modelo> modelo) {
}
public Modelo(Modelo modelo) {
this.codigo = modelo.codigo;
this.nome = modelo.nome;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Modelo modelo = (Modelo) o;
return Objects.equals(id, modelo.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCodigo() {
return codigo;
}
public String getNome() {
return nome;
}
}