Модернизация Android GSON Сериализация строки даты JSON в java.util.date

Я относительно новичок в разработке для Android, исходя из фона iOS. Попытка разобрать мой ответ JSON в объект Date, используя Retrofit и GSON.

Я попробовал этот путь без удачи: Модернизировать GSON сериализовать дату из строки json в java.util.date

Теперь я собираю ответ и назначаю объекты, когда они являются строками правильно, как и ожидалось. Однако, когда это объект даты, выдается следующая ошибка.

com.google.gson.JsonSyntaxException: 20170502T000000

java.text.ParseException: не удалось проанализировать дату ["20170502T000000']: индикатор часового пояса отсутствует

Я нашел много разных похожих вопросов и ответов в Интернете, однако ни один из них не помог.

MWE of JSON Response

{
    "EventDate": "20170502T000000"
}

Класс десериализатора JSON

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

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

public class DateDeserializer implements JsonDeserializer<Date> {

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

        SimpleDateFormat format = new
        SimpleDateFormat("yyyyMMdd'T'HHmmss");
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
        try {
            return format.parse(date);
        } catch (ParseException exp) {
            return null;
        }
    }
}

GSON Builder

public static final Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://uat.api.net/")
        .addConverterFactory(GsonConverterFactory.create(
                new GsonBuilder()
                        .registerTypeAdapter(Date.class, new DateDeserializer())
                        .create()
                )
        )
        .build();

Я попытался добавить 'Z' или Z в конец средства форматирования даты, хотя это не должно иметь значения в этом случае, потому что дата в JSON не показывает часовой пояс.

Любая помощь будет принята с благодарностью

0 ответов

Другие вопросы по тегам