JSON миллисекунды от даты до даты Java - PullRequest
0 голосов
/ 29 ноября 2018

Я потребляю api отдыха, и у меня есть эта проблема

java.lang.IndexOutOfBoundsException: Invalid time zone indicator '0'

В основном я использую Gson для преобразования Json в мой класс

Gson gson = new Gson();
    MyResponse myResponse = gson.fromJson(responseService.getNumber(id), MyResponse.class);

Но у меня есть датав моем JSON, как это

 "date": 1375412400000

Как я могу преобразовать в свой класс модели в дату?Чтобы преобразовать и показать 25/25/2018, например?

MyResponse.class

public class MyResponse {


    List<Dados> dados;


    public List<Dados> getDados() {
        return dados;
    }

    public void setDados(List<Dados> dados) {
        this.dados = dados;
    }


}

ResponseService.class

public interface ResponseService {

    @GetMapping("/search/rg/{rg}")
    String getDados(@PathVariable("rg") String rg);

}

Dados.Class

public class Dados {



@JsonFormat(shape = JsonFormat.Shape.STRING,pattern="dd/MM/yyyy",locale = "pt-BR", timezone = "Brazil/East")
@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
Date data;




String codigo;

String estado;


String  cidade;

String oriundo;


...gets and setters




}

1 Ответ

0 голосов
/ 30 ноября 2018

Я нашел решение.Сначала я должен был установить свою дату

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("M/d/yy hh:mm a");

После того, как мне пришлось создать класс для десериализации даты

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer; 
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

public class DateDeserializer implements JsonDeserializer<Date> {

  @Override
  public Date deserialize(JsonElement element, Type arg1, 
  JsonDeserializationContext arg2) throws JsonParseException {
    String date = element.getAsString();

    SimpleDateFormat formatter = new SimpleDateFormat("M/d/yy hh:mm a");
    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

    try {
        return formatter.parse(date);
    } catch (ParseException e) {
        System.err.println("Failed to parse Date due to:", e);
        return null;
    }
  }
}

, тогда я использовал свой класс, применяя в gsonbuilder

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...