Сериализация / десериализация простого объекта с использованием GSON - ошибка индикатора часового пояса - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть API, который принимает запросы и генерирует возвращенный JSON.Этот JSON генерируется с использованием объекта ниже и моего служебного класса.

Когда JSON возвращается в приложение, я фактически использую тот же самый вспомогательный класс для сериализации JSON обратно в объект.

Однако я получаю исключение (см. Ниже).Как мне обойти это?Я перепробовал практически все, что могу найти в Интернете, мне не повезло.

Объект:

public class MyPerson() {
    private String name;
    private Date lastEdited;
}

Класс утилит для конвертации:

public class GsonUtils {

    private static final Gson gson = new GsonBuilder()
            .setDateFormat("yyyy-MM-dd'T'hh:mm:ss")
            .create();

    public static String deserializeObjectToJSON(Object obj) {
        return gson.toJson(obj);
    }

    public static <T> Object serializeObjectFromJSON(String json, Class<T> classType) {
        return gson.fromJson(json, classType);
    }

    public static <T> List<T> serializeListOfObjectsFromJSON(String json, Type listType) {
        return gson.fromJson(json, listType);
    }
}

Ошибка:

Caused by: java.text.ParseException: Failed to parse date ["2019-02-12T12:00:00.0"]: No time zone indicator     at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.5.jar:na]    at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.5.jar:na]    ... 66 common frames omitted

Редактировать:

Взял предложения и обновил служебный класс, та же ошибка:

Caused by: java.text.ParseException: Failed to parse date ["2019-02-12T12:00:00.0"]: No time zone indicator
    at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.5.jar:na]
    at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.5.jar:na]
    ... 66 common frames omitted

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Из вашей ошибки очевидно, что JSON, который возвращается в ваше приложение, также имеет информацию о часовом поясе "2019-02-12T12:00:00.**0** (.0 в конце означает местный часовой пояс)

Caused by: java.text.ParseException: Failed to parse date ["2019-02-12T12:00:00.0"]: No time zone indicator     at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.5.jar:na]    at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.5.jar:na]    ... 66 common frames omitted

Для того, чтобысериализуйте это, вы должны обновить то же самое в GsonBuilder.

 private static final Gson gson = new GsonBuilder()
            .setDateFormat("yyyy-MM-dd'T'hh:mm:ss.S")
            .create();
0 голосов
/ 14 февраля 2019

Выяснил проблему

Я изменил формат на -

private static final Gson gson = new GsonBuilder()
        .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'")
        .create();

Эта ссылка помогла мне выяснить мою проблему (форматирование времени UTC было то, что я хотел):

Дата Java для UTC с использованием gson

0 голосов
/ 14 февраля 2019

yyyy-MM-dd'T'hh:mm:ss.Sукажите это как формат даты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...