@@ -13,6 +13,13 @@ import org.junit.jupiter.api.Test
1313import kotlin.reflect.full.memberProperties
1414
1515class GitHub922 {
16+ companion object {
17+ val nullToEmptyMapper = jacksonObjectMapper {
18+ enable(KotlinFeature .NullToEmptyCollection )
19+ enable(KotlinFeature .NullToEmptyMap )
20+ }
21+ }
22+
1623 private inline fun <reified T : Any > ObjectMapper.introspectSerialization (): BeanDescription =
1724 serializationConfig.introspect(serializationConfig.constructType(T ::class .java))
1825
@@ -24,15 +31,101 @@ class GitHub922 {
2431
2532 @Test
2633 fun `nullToEmpty does not override specification by Java annotation` () {
27- val mapper = jacksonObjectMapper {
28- enable(KotlinFeature .NullToEmptyCollection )
29- enable(KotlinFeature .NullToEmptyMap )
30- }
34+ val defaultDesc = defaultMapper.introspectDeserialization<GitHub922RequiredCollectionsDtoJava >()
35+
36+ assertTrue(defaultDesc.isRequired(" list" ))
37+ assertTrue(defaultDesc.isRequired(" map" ))
38+
39+ val nullToEmptyDesc = nullToEmptyMapper.introspectDeserialization<GitHub922RequiredCollectionsDtoJava >()
40+
41+ assertTrue(nullToEmptyDesc.isRequired(" list" ))
42+ assertTrue(nullToEmptyDesc.isRequired(" map" ))
43+ }
44+
45+ data class RequiredCollectionsDto1 (
46+ @JsonProperty(required = true ) val list : List <String >,
47+ @JsonProperty(required = true ) val map : Map <String , String >
48+ )
49+
50+ data class RequiredCollectionsDto2 (
51+ @JsonProperty(isRequired = OptBoolean .TRUE ) val list : List <String >,
52+ @JsonProperty(isRequired = OptBoolean .TRUE ) val map : Map <String , String >
53+ )
54+
55+ @Test
56+ fun `nullToEmpty does not override specification by annotation` () {
57+ val defaultDesc1 = defaultMapper.introspectDeserialization<RequiredCollectionsDto1 >()
58+
59+ assertTrue(defaultDesc1.isRequired(" list" ))
60+ assertTrue(defaultDesc1.isRequired(" map" ))
61+
62+ val nullToEmptyDesc1 = nullToEmptyMapper.introspectDeserialization<RequiredCollectionsDto1 >()
63+
64+ assertTrue(nullToEmptyDesc1.isRequired(" list" ))
65+ assertTrue(nullToEmptyDesc1.isRequired(" map" ))
66+
67+ val defaultDesc2 = defaultMapper.introspectDeserialization<RequiredCollectionsDto2 >()
68+
69+ assertTrue(defaultDesc2.isRequired(" list" ))
70+ assertTrue(defaultDesc2.isRequired(" map" ))
71+
72+ val nullToEmptyDesc2 = nullToEmptyMapper.introspectDeserialization<RequiredCollectionsDto2 >()
73+
74+ assertTrue(nullToEmptyDesc2.isRequired(" list" ))
75+ assertTrue(nullToEmptyDesc2.isRequired(" map" ))
76+ }
77+
78+ data class CollectionsDto (val list : List <String >, val map : Map <String , String >)
79+
80+ @Test
81+ fun `nullToEmpty does not affect for serialization` () {
82+ val defaultDesc = defaultMapper.introspectSerialization<CollectionsDto >()
83+
84+ assertTrue(defaultDesc.isRequired(" list" ))
85+ assertTrue(defaultDesc.isRequired(" map" ))
86+
87+ val nullToEmptyDesc = nullToEmptyMapper.introspectSerialization<CollectionsDto >()
88+
89+ assertTrue(nullToEmptyDesc.isRequired(" list" ))
90+ assertTrue(nullToEmptyDesc.isRequired(" map" ))
91+ }
92+
93+ class SetterCollectionsDto {
94+ lateinit var list: List <String >
95+ lateinit var map: Map <String , String >
96+ }
97+
98+ @Test
99+ fun `nullToEmpty does not affect for setter` () {
100+ val defaultDesc = defaultMapper.introspectDeserialization<SetterCollectionsDto >()
101+
102+ assertTrue(defaultDesc.isRequired(" list" ))
103+ assertTrue(defaultDesc.isRequired(" map" ))
104+
105+ val nullToEmptyDesc = nullToEmptyMapper.introspectDeserialization<SetterCollectionsDto >()
106+
107+ assertTrue(nullToEmptyDesc.isRequired(" list" ))
108+ assertTrue(nullToEmptyDesc.isRequired(" map" ))
109+ }
110+
111+ class FieldCollectionsDto {
112+ @JvmField
113+ var list: List <String > = emptyList()
114+ @JvmField
115+ var map: Map <String , String > = emptyMap()
116+ }
117+
118+ @Test
119+ fun `nullToEmpty does not affect for field` () {
120+ val defaultDesc = defaultMapper.introspectDeserialization<FieldCollectionsDto >()
121+
122+ assertTrue(defaultDesc.isRequired(" list" ))
123+ assertTrue(defaultDesc.isRequired(" map" ))
31124
32- val desc = mapper .introspectDeserialization<GitHub922RequiredCollectionsDtoJava >()
125+ val nullToEmptyDesc = nullToEmptyMapper .introspectDeserialization<FieldCollectionsDto >()
33126
34- assertTrue(desc .isRequired(" list" ))
35- assertTrue(desc .isRequired(" map" ))
127+ assertTrue(nullToEmptyDesc .isRequired(" list" ))
128+ assertTrue(nullToEmptyDesc .isRequired(" map" ))
36129 }
37130
38131 // isRequired_required_nullability_expected
0 commit comments