Gson 在解析 Joda DateTime 对象时省略小时数

Gson omits hours when parsing Joda DateTime object

我从服务器收到的对象中有一个 Joda DateTime 字段。例如字段值为2016-09-01T11:30:00.000+03:00。然后,当调用 gson.toJson() 时,该字段被转换为仅限日期的字符串,2016-09-01.

代码:

final GsonBuilder builder = new GsonBuilder().registerTypeAdapter(DateTime.class, new DateTimeSerializer());
final Gson gson = builder.create();
String str = gson.toJson(response.body());

调试时我注意到我的自定义类型适配器的 serialize 方法没有被调用。也许我没有正确理解这一点,但我期待将对象转换为 JSON 字符串时使用的方法(另一方面,在 gson.fromJson() 上使用 gson.fromJson() 时调用 deserialize字符串).

这是自定义类型适配器:

public class DateTimeSerializer implements JsonDeserializer<DateTime>, JsonSerializer<DateTime>
{
    private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.date();

    @Override
    public DateTime deserialize(final JsonElement je, final Type type, final JsonDeserializationContext jdc) throws JsonParseException {
        final String dateAsString = je.getAsString();
        return dateAsString.length() == 0 ? null : DATE_FORMAT.parseDateTime(dateAsString);
    }

    @Override
    public JsonElement serialize(final DateTime src, final Type typeOfSrc,
                                 final JsonSerializationContext context) {
        return new JsonPrimitive(src == null ? "" : DATE_FORMAT.print(src));
    }
}

知道为什么要这样解析以及如何解决这个问题吗?谢谢!

如评论中所述,我使用的是 ISODateTimeFormat.date() 而不是 ISODateTimeFormat.dateTime()