Skip to content

Commit 56e40cd

Browse files
committed
feat: reproduce code based on comment in issue
* FasterXML/jackson-module-kotlin#843 (comment)
1 parent 8ed6668 commit 56e40cd

File tree

3 files changed

+58
-24
lines changed

3 files changed

+58
-24
lines changed

src/main/java/com/arvgord/SecondObject.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.fasterxml.jackson.annotation.JsonAnyGetter;
44
import com.fasterxml.jackson.annotation.JsonAnySetter;
55
import com.fasterxml.jackson.annotation.JsonAutoDetect;
6+
import com.fasterxml.jackson.annotation.JsonCreator;
7+
import com.fasterxml.jackson.annotation.JsonProperty;
68

79
import java.util.LinkedHashMap;
810
import java.util.Map;
@@ -13,18 +15,23 @@
1315
)
1416
public class SecondObject {
1517

18+
private final String transactionId;
1619
@JsonAnySetter
1720
@JsonAnyGetter
18-
private Map<String, Object> data = new LinkedHashMap<>();
19-
private String transactionId;
21+
private final Map<String, Object> data;
2022

21-
public SecondObject() {}
2223

23-
SecondObject(String transactionId) {
24+
@JsonCreator
25+
public SecondObject(@JsonProperty("transactionId") String transactionId) {
2426
this.transactionId = transactionId;
27+
this.data = new LinkedHashMap<>();
2528
}
2629

2730
public String getTransactionId() {
28-
return transactionId;
31+
return this.transactionId;
32+
}
33+
34+
public Map<String, Object> getData() {
35+
return this.data;
2936
}
3037
}

src/main/java/com/arvgord/ThirdObject.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import com.fasterxml.jackson.annotation.JsonAnyGetter;
44
import com.fasterxml.jackson.annotation.JsonAnySetter;
55
import com.fasterxml.jackson.annotation.JsonAutoDetect;
6+
import com.fasterxml.jackson.annotation.JsonCreator;
7+
import com.fasterxml.jackson.annotation.JsonProperty;
68

7-
import java.util.LinkedHashMap;
89
import java.util.Map;
910

1011
@JsonAutoDetect(
@@ -13,22 +14,26 @@
1314
)
1415
public class ThirdObject {
1516

17+
private final String transactionId;
18+
@JsonAnySetter
1619
@JsonAnyGetter
17-
private Map<String, Object> data = new LinkedHashMap<>();
18-
private String transactionId;
20+
private final Map<String, Object> data;
1921

20-
ThirdObject() {}
2122

22-
public ThirdObject(String transactionId) {
23+
@JsonCreator
24+
public ThirdObject(
25+
@JsonProperty("transactionId") String transactionId,
26+
@JsonProperty("data") Map<String, Object> data
27+
) {
2328
this.transactionId = transactionId;
29+
this.data = data;
2430
}
2531

26-
@JsonAnySetter
27-
public void setData(String key, Object value) {
28-
this.data.put(key, value);
32+
public String getTransactionId() {
33+
return this.transactionId;
2934
}
3035

31-
public String getTransactionId() {
32-
return transactionId;
36+
public Map<String, Object> getData() {
37+
return this.data;
3338
}
3439
}

src/test/java/com/arvgord/JacksonSortingTest.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class JacksonSortingTest {
99

1010
private final ObjectMapper objectMapper = new ObjectMapper();
1111

12-
private final String JSON_INPUT_FIRST = """
12+
private final String JSON_INPUT = """
1313
{
1414
"b": 2,
1515
"a": 1,
@@ -31,11 +31,11 @@ public class JacksonSortingTest {
3131
}
3232
""";
3333

34-
private final String JSON_INPUT_SECOND_AND_THIRD = """
34+
private final String JSON_OUTPUT_SECOND = """
3535
{
3636
"transactionId": "test",
37-
"b": 2,
3837
"a": 1,
38+
"b": 2,
3939
"c": [
4040
{
4141
"id": "3",
@@ -53,28 +53,50 @@ public class JacksonSortingTest {
5353
}
5454
""";
5555

56-
private <T> void testSerializationDeserialization(String jsonInput, Class<T> clazz) throws Exception {
57-
T deserializedObject = objectMapper.readValue(jsonInput, clazz);
56+
private final String JSON_OUTPUT_THIRD = """
57+
{
58+
"transactionId": "test",
59+
"c": [
60+
{
61+
"id": "3",
62+
"value": "c"
63+
},
64+
{
65+
"id": "1",
66+
"value": "a"
67+
},
68+
{
69+
"id": "2",
70+
"value": "b"
71+
}
72+
],
73+
"a": 1,
74+
"b": 2
75+
}
76+
""";
77+
78+
private <T> void testSerializationDeserialization(String resultOutput, Class<T> clazz) throws Exception {
79+
T deserializedObject = objectMapper.readValue(JSON_INPUT, clazz);
5880
String serializedJson = objectMapper.writeValueAsString(deserializedObject);
5981

60-
String expectedJson = objectMapper.readTree(jsonInput).toPrettyString();
82+
String expectedJson = objectMapper.readTree(resultOutput).toPrettyString();
6183
String actualJson = objectMapper.readTree(serializedJson).toPrettyString();
6284

6385
assertEquals(expectedJson, actualJson);
6486
}
6587

6688
@Test
6789
public void testSerializationAndDeserializationForFirstObject() throws Exception {
68-
testSerializationDeserialization(JSON_INPUT_FIRST, FirstObject.class);
90+
testSerializationDeserialization(JSON_INPUT, FirstObject.class);
6991
}
7092

7193
@Test
7294
public void testSerializationAndDeserializationForSecondObject() throws Exception {
73-
testSerializationDeserialization(JSON_INPUT_SECOND_AND_THIRD, SecondObject.class);
95+
testSerializationDeserialization(JSON_OUTPUT_SECOND, SecondObject.class);
7496
}
7597

7698
@Test
7799
public void testSerializationAndDeserializationForThirdObject() throws Exception {
78-
testSerializationDeserialization(JSON_INPUT_SECOND_AND_THIRD, ThirdObject.class);
100+
testSerializationDeserialization(JSON_OUTPUT_THIRD, ThirdObject.class);
79101
}
80102
}

0 commit comments

Comments
 (0)