Size: a a a

Spring Framework and more

2019 December 06

РН

Роман Нагаев in Spring Framework and more
Plomipu Dmitri
срочный вопрос про сериализацию через jackson: как мне через конфигурацию в
ObjectMapper
реализовать поведение Feature или как мне настроить параметры самой конфигурации, чтобы при сериализации POJO в JSON конвертировать поля типа
LocalDate
и
LocalTime
в строку ? Я обсмотрел все фичи класса SerializationFeatures, нет там конвертации для тип дат и время, только
BigDecimal
, а при выходе JSON-ины jackson бездушно сконвертировал даты как JSON объекты, что логично.
источник

PD

Plomipu Dmitri in Spring Framework and more
неа не подойдёт. Я не успел написать, что ответы подобные тому, что в отмечен галочкой тут: https://stackoverflow.com/questions/40327970/deserialize-java-8-localdatetime-with-jacksonmapper
где говорится, что нужно менять корректировать свойства POJO объекта, мне не подойдёт. Нужно как-то изменить поведение маппера
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Plomipu Dmitri
неа не подойдёт. Я не успел написать, что ответы подобные тому, что в отмечен галочкой тут: https://stackoverflow.com/questions/40327970/deserialize-java-8-localdatetime-with-jacksonmapper
где говорится, что нужно менять корректировать свойства POJO объекта, мне не подойдёт. Нужно как-то изменить поведение маппера
вы же спрашивали про СЕРИАЛИЗАЦИЮ, в линкуете пост СО про ДЕСЕРИАЛИЗАЦИЮ...
источник

K

Kanstantsin in Spring Framework and more
Всем привет. Кто-нибудь настраивал springfox swagger на кастомизацию примеры запроса/ответа? Я использую в своих контроллерах классы, которые имеют очень много полей, но на деле используются только два-три. Можно ли как-нибудь кастомизировать дефолтный объект, который отображается в сваггере в качестве примера? ApiModelProperty почему-то работает только с примитивами.
источник

RS

Ruslan Stelmachenko in Spring Framework and more
И что именно вам не подойдет? У вас POJO-объект не ваш? Аннотацию не можете навесить? Тогда Mixin.
источник

PD

Plomipu Dmitri in Spring Framework and more
Ruslan Stelmachenko
вы же спрашивали про СЕРИАЛИЗАЦИЮ, в линкуете пост СО про ДЕСЕРИАЛИЗАЦИЮ...
я знаю, но это не важно. Просто обратите внимание на поля которые помечены в ответе на вопрос:

@DateTimeFormat(iso = DateTimeFormatter.ISO_LOCAL_DATE_TIME)
@JsonFormat(pattern = "YYYY-MM-dd HH:mm")
private LocalDateTime startDate;


там парень советовал использовать для преобразований приклепление аннотаций к полям POJO. А они есть как и для сериализации так и для десиарилации. Я именно это и имел в виду
источник

PD

Plomipu Dmitri in Spring Framework and more
Ruslan Stelmachenko
И что именно вам не подойдет? У вас POJO-объект не ваш? Аннотацию не можете навесить? Тогда Mixin.
потому как да. POJO не мой и его изменять и чтото в него добавлять нельзя, так как логика нашего прод приложения может порушиться
источник

RS

Ruslan Stelmachenko in Spring Framework and more
в данном примере вам нужна только одна
@DateTimeFormat это вообще аннотация спрингда для работы с query-параметрами
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Plomipu Dmitri
потому как да. POJO не мой и его изменять и чтото в него добавлять нельзя, так как логика нашего прод приложения может порушиться
тогда почитайте про jackson mixins
источник

PD

Plomipu Dmitri in Spring Framework and more
ок. Счас соображу
источник

PD

Plomipu Dmitri in Spring Framework and more
Ruslan Stelmachenko
тогда почитайте про jackson mixins
сомневаюсь, что он подойдёт так как мне надо, чтото вроде поисковика по POJO в ObjectMapper, который сопоставляет все поля с JSON-иной при сериализации и если он видит поле типа LocalTime и LocalDateTime то их конвертирует не в JSON, а в простой plain текст. p.s. я знаю, что дозер тут не при чём, но странно, что при работе с POJO и dto-шками в маппере дозера, есть возможность задать через конфиг, что делать когда встречается то или иное поле в сорс поле класса объекта для перемещения его значения в сконвертированном виде в таргет объект, но в jackson-е такое ограниченно конвертированием дат в таймстампы. Безобразие
источник

PD

Plomipu Dmitri in Spring Framework and more
а мне нужно это реализовать это в ближайшие часы
источник

PD

Plomipu Dmitri in Spring Framework and more
да и сорс моей POJO мне доступен, но его все равно нельзя менять, а миксины вообще нужны для объектов класса, исходный которого закрыт и он от сторонней либы.
источник

RS

Ruslan Stelmachenko in Spring Framework and more
аннотация всего лишь задает формат поля (число или строка, и в каком формате).
если у вас LocalDate сериализуется в объект, значит у вас не покдлючен модуль com.fasterxml.jackson.datatype:jackson-datatype-jsr310

хотя в буте он вроде по дефолту подключается. может у вас не бут..
источник

PD

Plomipu Dmitri in Spring Framework and more
у нас бут
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Plomipu Dmitri
да и сорс моей POJO мне доступен, но его все равно нельзя менять, а миксины вообще нужны для объектов класса, исходный которого закрыт и он от сторонней либы.
миксины подходят для любых объектов, сорцы которых нельзя менять. даже если они ваши, но в другом модуле, например
источник

RS

Ruslan Stelmachenko in Spring Framework and more
там нет каких-то ограничений "только от сторонней либы" )
источник

PD

Plomipu Dmitri in Spring Framework and more
Ruslan Stelmachenko
аннотация всего лишь задает формат поля (число или строка, и в каком формате).
если у вас LocalDate сериализуется в объект, значит у вас не покдлючен модуль com.fasterxml.jackson.datatype:jackson-datatype-jsr310

хотя в буте он вроде по дефолту подключается. может у вас не бут..
я вам клянусь, что тот модуль у меня подключен )
источник

PD

Plomipu Dmitri in Spring Framework and more
но джексон бездушно и объекты дат в JSON сериализует, а мне нужно чтобы дата полученная из POJO в json-е была как строка, например, "06.12.2019".
источник

PD

Plomipu Dmitri in Spring Framework and more
а не так как счас:
{
           "year": 2019,
           "month": "DECEMBER",
           "monthValue": 12,
           "dayOfMonth": 6,
           "dayOfYear": 340,
           "dayOfWeek": "FRIDAY",
           "chronology": {
              "calendarType": "iso8601",
              "id": "ISO"
           },
           "era": "CE",
           "leapYear": false
        }
источник