Skip to content

Add extensions for configOverride #959

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions release-notes/CREDITS-2.x
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Contributors:
# 2.19.0 (not yet released)

WrongWrong (@k163377)
* #959: Add extensions for configOverride
* #954: Replace BooleanTriState with OptBoolean
* #944: Fixed to use common util for Member accessibility override
* #937: Added type match check to read functions
Expand Down
1 change: 1 addition & 0 deletions release-notes/VERSION-2.x
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Co-maintainers:

2.19.0 (not yet released)

#959: Extension functions has been added to simplify `configOverride` calls to `ObjectMapper` and `Module.SetupContext`.
#954: Replaced `OptBoolean` of internal caching with a common implementation.
#944: Common util is now used for member accessibility overrides.
#937: For `readValue` and other shorthands for `ObjectMapper` deserialization methods,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import com.fasterxml.jackson.databind.JsonDeserializer
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.MappingIterator
import com.fasterxml.jackson.databind.Module
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.ObjectReader
import com.fasterxml.jackson.databind.RuntimeJsonMappingException
import com.fasterxml.jackson.databind.cfg.MutableConfigOverride
import com.fasterxml.jackson.databind.json.JsonMapper
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.databind.node.ArrayNode
Expand Down Expand Up @@ -226,3 +228,7 @@ fun <T : Any> SimpleModule.addDeserializer(kClass: KClass<T>, deserializer: Json
kClass.javaPrimitiveType?.let { addDeserializer(it, deserializer) }
addDeserializer(kClass.javaObjectType, deserializer)
}

inline fun <reified T : Any> ObjectMapper.configOverride(): MutableConfigOverride = configOverride(T::class.java)
inline fun <reified T : Any> Module.SetupContext.configOverride(): MutableConfigOverride =
configOverride(T::class.java)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.fasterxml.jackson.module.kotlin.test.github

import com.fasterxml.jackson.annotation.JsonSetter
import com.fasterxml.jackson.annotation.Nulls
import com.fasterxml.jackson.module.kotlin.configOverride
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import org.junit.jupiter.api.Nested
Expand Down Expand Up @@ -89,9 +90,9 @@ class GitHub876 {
@Nested
inner class WithoutAnnotationWithoutDefaultTest {
val mapper = jacksonObjectMapper().apply {
configOverride(List::class.java).setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride(Map::class.java).setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride(String::class.java).setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride<List<*>>().setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride<Map<*, *>>().setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride<String>().setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
}

@Test
Expand Down Expand Up @@ -124,9 +125,9 @@ class GitHub876 {
@Nested
inner class WithoutAnnotationWithDefaultTest {
val mapper = jacksonObjectMapper().apply {
configOverride(List::class.java).setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride(Map::class.java).setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride(String::class.java).setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride<List<*>>().setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride<Map<*, *>>().setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
configOverride<String>().setterInfo = JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)
}

@Test
Expand Down