Как мне заставить Джексона сериализовать мой объект Joda DateTime в соответствии с простым шаблоном (например, «дд-мм-гггг»)?
Я пробовал:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
Я также пробовал:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Спасибо!
Ответы:
Это стало очень просто с Jackson 2.0 и модулем Joda.
Зависимость от Maven:
Код и документация: https://github.com/FasterXML/jackson-datatype-joda
Двоичные файлы: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/
источник
В отображаемом объекте:
В CustomDateSerializer:
источник
org.codehaus.jackson
а неcom.fasterxml.jackson.core
. Использование второго пакета у меня не сработало. Фактически, мое приложение в Джерси даже не соблюдало@JsonSerialized
аннотацию.Как сказал @Kimble, с Jackson 2 очень легко использовать форматирование по умолчанию; просто зарегистрируйтесь
JodaModule
на своемObjectMapper
.Для пользовательской сериализации / десериализации
DateTime
вам необходимо реализовать свои собственныеStdScalarSerializer
иStdScalarDeserializer
; это довольно запутанно, но все равно.Например, вот
DateTime
сериализатор, который используетISODateFormat
часовой пояс UTC:И соответствующий десериализатор:
Затем свяжите их вместе модулем:
Затем зарегистрируйте модуль на своем
ObjectMapper
:источник
Простое решение
Я столкнулся с подобной проблемой, и мое решение намного яснее, чем указано выше.
Я просто использовал узор в
@JsonFormat
аннотацииВ основном у моего класса есть
DateTime
поле, поэтому я помещаю аннотацию вокруг получателя:Я сериализую класс с помощью
ObjectMapper
Мы используем Jackson 2.5.4
источник
https://stackoverflow.com/a/10835114/1113510
Хотя вы можете разместить аннотацию для каждого поля даты, лучше сделать глобальную конфигурацию для вашего сопоставителя объектов. Если вы используете Джексон, вы можете настроить свою пружину следующим образом:
Для CustomObjectMapper:
Конечно, SimpleDateFormat может использовать любой нужный вам формат.
источник
setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
сделал трюк для меня,Тем временем Джексон автоматически регистрирует модуль Joda, когда JodaModule находится в пути к классам. Я просто добавил в Maven jackson-datatype-joda, и он сразу заработал.
Вывод JSON:
источник
Для тех, у кого есть Spring Boot, вам нужно добавить модуль в свой контекст, и он будет добавлен в вашу конфигурацию следующим образом.
И если вы хотите использовать новый модуль времени java8 jsr-310.
источник
Похоже, что для Jackson 1.9.12 такой возможности по умолчанию нет из-за:
Этот класс сериализует данные с помощью метода toString () Joda DateTime.
Подход, предложенный Расти Кунцем, идеально подходит для моего случая.
источник
Я использую Java 8, и у меня это сработало.
Добавьте зависимость от
pom.xml
и добавьте JodaModule на свой
ObjectMapper
источник