Pessoal, tenho uma api e estou tentando consumir ela com o retrofit. Estou usando o Jackson para desserializar o json. O problema é quando se depara com um LocalDateTime, o Jackson não consegue:
I/System.out: Erro ao chamar apiCannot construct instance of
java.time.LocalDateTime
(no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value (‘2020-12-11T20:55:48’)
I/System.out: at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 1, column: 87] (through reference chain: com.example.javaandroid.beans.Pedido[“data”])
Meu bean de Pedido:
package com.example.javaandroid.beans;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
public class Pedido {
private int id;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'hh:mm:ss")
private LocalDateTime data;
private Cliente cliente;
private List<ItemDoPedido> itensPedido;
public Pedido() {}
public Pedido(int id, LocalDateTime data, Cliente cliente, List<ItemDoPedido> itensPedido) {
this.id = id;
this.data = data;
this.cliente = cliente;
this.itensPedido = itensPedido;
}
Minha Activity:
public class ListaDePedidosActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_de_pedidos);
}
public void obterPedidos(View view) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:8080/java-android/webresources/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
PedidoService service = retrofit.create(PedidoService.class);
Call<Pedido> call = service.listarPedidos();
call.enqueue(new Callback<Pedido>() {
public void onResponse(Call<Pedido> call, Response<Pedido> response) {
if(response.isSuccessful()) {
Pedido ped = response.body();
System.out.println(ped.getData());
} else {
System.out.println("Erro");
}
}
Já tentei várias soluções do StackOverflow, que na maioria são variações da anotação (
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'")
), mas sigo recebendo o mesmo erro.
Como podem ver, a resposta da minha api vem certinho:
Ideias do que posso fazer?
Valeu pessoal!