Я делаю веб-приложение, используя Джексон & Джерси. Я сделал Response POJO для хостов API. Я создал пользовательский сериализатор Jackson для поля даты, как показано ниже.custom jackson serializer не работает с gson
class A{
LocalDateTime localDateTime = LocalDateTime.now();
@JsonSerialize(using = JacksonSerializers.DateSecondsFromEpochUTCSerializer.class)
public LocalDateTime getLocalDateTime() {
return localDateTime;
}
public void setLocalDateTime(LocalDateTime localDateTime) {
this.localDateTime = localDateTime;
}
}
И Serializer, как показано ниже:
public class JacksonSerializers {
@Component
public static class DateSecondsFromEpochUTCSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime localDateTime, JsonGenerator gen, SerializerProvider provider)
throws IOException, JsonProcessingException {
gen.writeNumber(localDateTime.toEpochSecond(ZoneOffset.UTC));
}
}
Приведенный выше код работает нормально, когда API, называется и ответ содержит дату в формате эпохи.
Однако приведенная выше сериализация не работает, когда я пытаюсь создать JSON класса с использованием GSON lib. Я получаю ниже неправильный вывод:
System.out.print(new Gson().toJson(new A()));
дает
{"localDateTime":{"date":{"year":2017,"month":1,"day":31},"time":{"hour":12,"minute":55,"second":53,"nano":481000000}}}
Но я хочу 1485847871
. В принципе, я хочу сериализовать LocalDateTime в эпоху в обоих потоках. Я пытаюсь сделать это сейчас с GSON, но это не хардкорное требование. Любое изящное решение для достижения обоих результатов.
Не может ли вопрос в основном сводиться к «как мне сериализовать формат LocalDateTime в формате эпохи с помощью GSON?»? Почему часть Джексона, которая, по-видимому, работает по назначению, даже часть вопроса? – Henrik
Потому что это не то, что я намерен спросить. Я уже могу разобрать LocalDateTime на формат epoch в Джерси, используя Джексона. Теперь я использую то же POJO для какой-то другой задачи, и на этот раз я сериализую POJO в JSON, используя GSON, и этот метод не дает желаемого результата, аналогичного тому, что производит Джексон. Я хотел найти общее решение обеих проблем, потому что обе вещи должны работать одновременно. –
ObjectMapper (Jackson) решил обе проблемы. Последняя часть имела предварительное условие к ней, то есть более ранняя сериализация с использованием Джексона не может измениться, но последняя может –