1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
package com.fasterxml.jackson.databind.introspect;
import java.util.Collections;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.cfg.MapperConfig;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.util.BeanUtil;
// [databind#2527] Support Kotlin-style "is" properties
public class IsGetterRenaming2527Test extends BaseMapTest
{
static class POJO2527 {
private boolean isEnabled;
protected POJO2527() { }
public POJO2527(boolean b) {
isEnabled = b;
}
public boolean getEnabled() { return isEnabled; }
public void setEnabled(boolean b) { isEnabled = b; }
}
static class POJO2527PublicField {
public boolean isEnabled;
protected POJO2527PublicField() { }
public POJO2527PublicField(boolean b) {
isEnabled = b;
}
public boolean getEnabled() { return isEnabled; }
public void setEnabled(boolean b) { isEnabled = b; }
}
static class POJO2527Creator {
private final boolean isEnabled;
public POJO2527Creator(@JsonProperty("enabled") boolean b) {
isEnabled = b;
}
public boolean getEnabled() { return isEnabled; }
}
@SuppressWarnings("serial")
static class MyIntrospector extends JacksonAnnotationIntrospector
{
@Override
public PropertyName findRenameByField(MapperConfig<?> config,
AnnotatedField f, PropertyName implName)
{
final String origSimple = implName.getSimpleName();
if (origSimple.startsWith("is")) {
String mangledName = BeanUtil.stdManglePropertyName(origSimple, 2);
// Needs to be valid ("is" -> null), and different from original
if ((mangledName != null) && !mangledName.equals(origSimple)) {
return PropertyName.construct(mangledName);
}
}
return null;
}
}
private final ObjectMapper MAPPER = jsonMapperBuilder()
.annotationIntrospector(new MyIntrospector())
.build();
public void testIsPropertiesStdKotlin() throws Exception
{
POJO2527 input = new POJO2527(true);
final String json = MAPPER.writeValueAsString(input);
Map<?, ?> props = MAPPER.readValue(json, Map.class);
assertEquals(Collections.singletonMap("isEnabled", Boolean.TRUE),
props);
POJO2527 output = MAPPER.readValue(json, POJO2527.class);
assertEquals(input.isEnabled, output.isEnabled);
}
public void testIsPropertiesWithPublicField() throws Exception
{
POJO2527PublicField input = new POJO2527PublicField(true);
final String json = MAPPER.writeValueAsString(input);
Map<?, ?> props = MAPPER.readValue(json, Map.class);
assertEquals(Collections.singletonMap("isEnabled", Boolean.TRUE),
props);
POJO2527PublicField output = MAPPER.readValue(json, POJO2527PublicField.class);
assertEquals(input.isEnabled, output.isEnabled);
}
public void testIsPropertiesViaCreator() throws Exception
{
POJO2527Creator input = new POJO2527Creator(true);
final String json = MAPPER.writeValueAsString(input);
Map<?, ?> props = MAPPER.readValue(json, Map.class);
assertEquals(Collections.singletonMap("isEnabled", Boolean.TRUE),
props);
POJO2527Creator output = MAPPER.readValue(json, POJO2527Creator.class);
assertEquals(input.isEnabled, output.isEnabled);
}
}
|