Проблема десериализации Gson для OffsetDateTime - PullRequest
0 голосов
/ 03 мая 2018

Я использую gson 2.8 для сериализации и десериализации У меня есть поле OffsetDateTime в моем классе, когда я даю значение "orderTime":"2018-05-02T14:23:00Z" Я получаю его как "2018-05-02T14:23Z", где я ожидаю "2018-05-02T14:23:00Z", если я дам "orderTime":"2018-05-02T14:23:01Z" Я получаю, как ожидалось "2018-05-02T14:23:00Z". Есть ли способ исправить эту проблему?

Вот мой класс заказа

import com.google.gson.annotations.SerializedName;
import java.time.OffsetDateTime;
public class Order {
    @SerializedName("orderId")
    private String orderId = null;

    @SerializedName("orderType")
    private String orderType = null;

    @SerializedName("orderTime")
    private OffsetDateTime orderTime = null;
    ....
}

1 Ответ

0 голосов
/ 03 мая 2018

Есть ли способ решить эту проблему?

Исправления нет. Вопрос в том, есть ли проблема вообще.

2018-05-02T14:23:00Z и 2018-05-02T14:23Z обозначают один и тот же момент времени. Когда секунды равны 0, как здесь, они являются необязательными в формате. Формат называется ISO 8601. Таким образом, вы получили ожидаемое значение.

Строка, которую вы видите, создается OffsetDateTime.toString(). Невозможно изменить работу этого метода (даже путем переопределения, поскольку OffsetDateTime является конечным классом).

Есть исправление для просмотра другой строки. Используйте форматтер:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXXXX");
    System.out.println(orderTime.format(formatter));

Это печатает:

2018-05-02T14: 23: 00Z

Ссылка: Статья в Википедии о ISO 8601

...