1
1
package com .fasterxml .jackson .databind ;
2
2
3
+ import com .fasterxml .jackson .annotation .JsonCreator ;
3
4
import com .fasterxml .jackson .annotation .JsonIgnore ;
4
5
import com .fasterxml .jackson .annotation .JsonProperty ;
5
6
12
13
13
14
public class RecordTest extends BaseMapTest
14
15
{
15
- record SimpleRecord (int id , String name ) {
16
- }
16
+ record SimpleRecord (int id , String name ) { }
17
17
18
- record RecordOfRecord (SimpleRecord record ) {
19
- }
18
+ record RecordOfRecord (SimpleRecord record ) { }
20
19
21
- record RecordWithConstructor (int id , String name ) {
22
- public RecordWithConstructor (int id ) {
23
- this (id , "name" );
20
+ record RecordWithCanonicalCtorOverride (int id , String name ) {
21
+ public RecordWithCanonicalCtorOverride (int id , String name ) {
22
+ this .id = id ;
23
+ this .name = "name" ;
24
24
}
25
25
}
26
26
27
- record JsonIgnoreRecord (int id , @ JsonIgnore String name ) {
27
+ record RecordWithAltCtor (int id , String name ) {
28
+ @ JsonCreator (mode = JsonCreator .Mode .PROPERTIES )
29
+ public RecordWithAltCtor (@ JsonProperty ("id" ) int id ) {
30
+ this (id , "name2" );
31
+ }
28
32
}
29
33
30
- record JsonPropertyRenameRecord (int id , @ JsonProperty ("rename" )String name ) {
31
- }
34
+ record JsonIgnoreRecord (int id , @ JsonIgnore String name ) { }
32
35
33
- record EmptyRecord () {
34
- }
36
+ record JsonPropertyRenameRecord (int id , @ JsonProperty ("rename" )String name ) { }
37
+
38
+ record EmptyRecord () { }
35
39
36
40
private final ObjectMapper MAPPER = newJsonMapper ();
37
41
@@ -46,7 +50,6 @@ public void testClassUtil() {
46
50
47
51
assertTrue (ClassUtil .isRecordType (SimpleRecord .class ));
48
52
assertTrue (ClassUtil .isRecordType (RecordOfRecord .class ));
49
- assertTrue (ClassUtil .isRecordType (RecordWithConstructor .class ));
50
53
assertTrue (ClassUtil .isRecordType (JsonIgnoreRecord .class ));
51
54
assertTrue (ClassUtil .isRecordType (JsonPropertyRenameRecord .class ));
52
55
}
@@ -56,7 +59,6 @@ public void testRecordJavaType() {
56
59
57
60
assertTrue (MAPPER .constructType (SimpleRecord .class ).isRecordType ());
58
61
assertTrue (MAPPER .constructType (RecordOfRecord .class ).isRecordType ());
59
- assertTrue (MAPPER .constructType (RecordWithConstructor .class ).isRecordType ());
60
62
assertTrue (MAPPER .constructType (JsonIgnoreRecord .class ).isRecordType ());
61
63
assertTrue (MAPPER .constructType (JsonPropertyRenameRecord .class ).isRecordType ());
62
64
}
@@ -135,10 +137,18 @@ public void testSerializeJsonIgnoreRecord() throws Exception {
135
137
assertEquals ("{\" id\" :123}" , json );
136
138
}
137
139
138
- public void testDeserializeRecordWithConstructor () throws Exception {
139
- RecordWithConstructor value = MAPPER .readValue ("{\" id\" :123,\" name\" :\" Bob\" }" ,
140
- RecordWithConstructor .class );
141
- assertEquals (new RecordWithConstructor (123 , "Bob" ), value );
140
+ public void testDeserializeWithCanonicalCtorOverride () throws Exception {
141
+ RecordWithCanonicalCtorOverride value = MAPPER .readValue ("{\" id\" :123,\" name\" :\" Bob\" }" ,
142
+ RecordWithCanonicalCtorOverride .class );
143
+ assertEquals (123 , value .id ());
144
+ assertEquals ("name" , value .name ());
145
+ }
146
+
147
+ public void testDeserializeWithAltCtor () throws Exception {
148
+ RecordWithAltCtor value = MAPPER .readValue ("{\" id\" :2812}" ,
149
+ RecordWithAltCtor .class );
150
+ assertEquals (2812 , value .id ());
151
+ assertEquals ("name2" , value .name ());
142
152
}
143
153
144
154
public void testSerializeJsonRenameRecord () throws Exception {
0 commit comments