Как зарегистрировать модуль Джексона в Quarkus? - PullRequest
0 голосов
/ 06 мая 2019

Я бы хотел зарегистрировать Kotlin-Module с Джексоном в приложении Quarkus, чтобы Джексон мог десериализовать JSON в классы данных без необходимости использования NoArgsConstructor. Каков наилучший способ сделать это?

Обновление после комментария

Приложение представляет собой REST-сервис, написанный на Kotlin. На уровне API мы используем классы View (например, PersonView или PersonWriteView) для абстрагирования от моделей и сущностей в сервисе, соответственно. персистентный слой. Чтобы уменьшить накладные расходы, в то же время получая приятные и значимые функции equals () и hashcode (), мы используем для этого data class es.

В ванильных настройках Джексон не может напрямую десериализоваться в классы данных, потому что ему нужен пустой конструктор. Это можно исправить, применив плагин компилятора без аргументов и добавив аннотацию, например. @NoArgConstructor похоже на то, что предлагает Lombok. Но, конечно, таким образом, мы должны аннотировать каждый класс данных в API, который подвержен ошибкам.

Лучшее решение для этого - включить com.fasterxml.jackson.module: jackson-module-kotlin, который даст вам чудесный модуль KotlinModule. После этого mapper.treeToValue() может напрямую создавать data class экземпляры без необходимости в пустом конструкторе. Чтобы это работало, мы должны зарегистрировать модуль в ObjectMapper, например. через ObjectMapper().findAndRegisterModules(). Все, что я хочу знать, - это как настроить ObjectMapper, который используется Resteasy для демонтажа JSON-объектов.

1 Ответ

0 голосов
/ 21 мая 2019

Вы можете попытаться добавить аннотацию @JsonbCreator к классам модели запросов.Таким образом, в этом случае JSON-B попытается использовать конструктор для создания ваших объектов, а не без аргументов / отражения

Например:

data class MyRequest @JsonbCreator constructor(
    @JsonbProperty("propertyOne") val propertyOne: String,
    @JsonbProperty("propertyTwo") val propertyTwo: : String
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...