Использование Jackson 2.9.6
У меня есть следующее определение класса данных:
data class SomeDTO @JsonCreator internal constructor
(
@get:JsonProperty(value = "first-property", required = true)
@param:JsonProperty(value = "first-property", required = true)
val firstProperty: Long?,
@get:JsonProperty(value = "second-property")
@param:JsonProperty(value = "second-property")
val secondProperty: Int = 1234
@get:JsonProperty("third-property", required = true)
@param:JsonProperty("third-property", required = true)
val thirdProperty: Int
)
Что я ожидаю от JSON, который десериализуется в SomeDTO
- Если
firstProperty
отсутствует, должно выдаться исключение. - Если
firstProperty
имеет значение null, ему следует присвоить значение null, поскольку оно может иметь значение null. - Если
secondProperty
отсутствует или равен нулю, ему следует присвоить значение по умолчанию 1234
- Если
thirdProperty
отсутствует или равно нулю, должно выдаться исключение.
По сути, я могу контролировать, какие значения можно десериализовать и во что.
Что я испытываю:
Если не с использованием KotlinModule, тогда (1), (2) и (4) работают, но (3) не работают с:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Невозможно отобразитьnull
для типа int (установите для DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES значение 'false', чтобы разрешить)
Если вы используете KotlinModule, то (2), (3) и (4) работают, но (1)не удается.
Основная часть конфигурации ObjectMapper:
disable(
MapperFeature.AUTO_DETECT_CREATORS,
MapperFeature.AUTO_DETECT_FIELDS,
MapperFeature.AUTO_DETECT_GETTERS,
MapperFeature.AUTO_DETECT_IS_GETTERS
)
disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
registerModule(ParanamerModule())
registerModule(KotlinModule()) // Might be registered or not
disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
Я думаю, что проще использовать KotlinModule, но я не знаю, как сказать, что нетавтоматическое присвоение пустых значений пустым полям, когда свойство отсутствует в JSON