2
2
3
3
import java .util .*;
4
4
5
+ import com .fasterxml .jackson .annotation .JsonFormat ;
5
6
import com .fasterxml .jackson .annotation .JsonInclude ;
6
7
import com .fasterxml .jackson .annotation .JsonSetter ;
7
8
import com .fasterxml .jackson .databind .introspect .VisibilityChecker ;
@@ -43,10 +44,20 @@ public class ConfigOverrides
43
44
*/
44
45
protected Boolean _defaultMergeable ;
45
46
47
+ /**
48
+ * Global default setting (if any) for leniency: if disabled ({link Boolean#TRUE}),
49
+ * "strict" (not lenient): default setting if absence of value is considered "lenient"
50
+ * in Jackson 2.x. Default setting may be overridden by per-type and per-property
51
+ * settings.
52
+ *
53
+ * @since 2.10
54
+ */
55
+ protected Boolean _defaultLeniency ;
56
+
46
57
/*
47
- /**********************************************************
58
+ /**********************************************************************
48
59
/* Life cycle
49
- /**********************************************************
60
+ /**********************************************************************
50
61
*/
51
62
52
63
public ConfigOverrides () {
@@ -55,22 +66,35 @@ public ConfigOverrides() {
55
66
JsonInclude .Value .empty (),
56
67
JsonSetter .Value .empty (),
57
68
VisibilityChecker .Std .defaultInstance (),
58
- null
69
+ null , null
59
70
);
60
71
}
61
72
73
+ /**
74
+ * @since 2.10
75
+ */
62
76
protected ConfigOverrides (Map <Class <?>, MutableConfigOverride > overrides ,
63
- JsonInclude .Value defIncl ,
64
- JsonSetter .Value defSetter ,
65
- VisibilityChecker <?> defVisibility ,
66
- Boolean defMergeable ) {
77
+ JsonInclude .Value defIncl , JsonSetter .Value defSetter ,
78
+ VisibilityChecker <?> defVisibility , Boolean defMergeable , Boolean defLeniency )
79
+ {
67
80
_overrides = overrides ;
68
81
_defaultInclusion = defIncl ;
69
82
_defaultSetterInfo = defSetter ;
70
83
_visibilityChecker = defVisibility ;
71
84
_defaultMergeable = defMergeable ;
85
+ _defaultLeniency = defLeniency ;
72
86
}
73
87
88
+ /**
89
+ * @deprecated Since 2.10
90
+ */
91
+ @ Deprecated // since 2.10
92
+ protected ConfigOverrides (Map <Class <?>, MutableConfigOverride > overrides ,
93
+ JsonInclude .Value defIncl , JsonSetter .Value defSetter ,
94
+ VisibilityChecker <?> defVisibility , Boolean defMergeable ) {
95
+ this (overrides , defIncl , defSetter , defVisibility , defMergeable , null );
96
+ }
97
+
74
98
public ConfigOverrides copy ()
75
99
{
76
100
Map <Class <?>, MutableConfigOverride > newOverrides ;
@@ -83,15 +107,16 @@ public ConfigOverrides copy()
83
107
}
84
108
}
85
109
return new ConfigOverrides (newOverrides ,
86
- _defaultInclusion , _defaultSetterInfo , _visibilityChecker , _defaultMergeable );
110
+ _defaultInclusion , _defaultSetterInfo , _visibilityChecker ,
111
+ _defaultMergeable , _defaultLeniency );
87
112
}
88
113
89
114
/*
90
- /**********************************************************
115
+ /**********************************************************************
91
116
/* Per-type override access
92
- /**********************************************************
117
+ /**********************************************************************
93
118
*/
94
-
119
+
95
120
public ConfigOverride findOverride (Class <?> type ) {
96
121
if (_overrides == null ) {
97
122
return null ;
@@ -111,10 +136,38 @@ public MutableConfigOverride findOrCreateOverride(Class<?> type) {
111
136
return override ;
112
137
}
113
138
139
+ /**
140
+ * Specific accessor for finding {code JsonFormat.Value} for given type,
141
+ * considering global default for leniency as well as per-type format
142
+ * override (if any).
143
+ *
144
+ * @return Default format settings for type; never null.
145
+ *
146
+ * @since 2.10
147
+ */
148
+ public JsonFormat .Value findFormatDefaults (Class <?> type ) {
149
+ if (_overrides != null ) {
150
+ ConfigOverride override = _overrides .get (type );
151
+ if (override != null ) {
152
+ JsonFormat .Value format = override .getFormat ();
153
+ if (format != null ) {
154
+ if (!format .hasLenient ()) {
155
+ return format .withLenient (_defaultLeniency );
156
+ }
157
+ return format ;
158
+ }
159
+ }
160
+ }
161
+ if (_defaultLeniency == null ) {
162
+ return JsonFormat .Value .empty ();
163
+ }
164
+ return JsonFormat .Value .forLeniency (_defaultLeniency );
165
+ }
166
+
114
167
/*
115
- /**********************************************************
168
+ /**********************************************************************
116
169
/* Global defaults access
117
- /**********************************************************
170
+ /**********************************************************************
118
171
*/
119
172
120
173
public JsonInclude .Value getDefaultInclusion () {
@@ -129,6 +182,13 @@ public Boolean getDefaultMergeable() {
129
182
return _defaultMergeable ;
130
183
}
131
184
185
+ /**
186
+ * @since 2.10
187
+ */
188
+ public Boolean getDefaultLeniency () {
189
+ return _defaultLeniency ;
190
+ }
191
+
132
192
/**
133
193
* @since 2.9
134
194
*/
@@ -157,6 +217,13 @@ public void setDefaultMergeable(Boolean v) {
157
217
_defaultMergeable = v ;
158
218
}
159
219
220
+ /**
221
+ * @since 2.10
222
+ */
223
+ public void setDefaultLeniency (Boolean v ) {
224
+ _defaultLeniency = v ;
225
+ }
226
+
160
227
/**
161
228
* @since 2.9
162
229
*/
@@ -165,9 +232,9 @@ public void setDefaultVisibility(VisibilityChecker<?> v) {
165
232
}
166
233
167
234
/*
168
- /**********************************************************
235
+ /**********************************************************************
169
236
/* Helper methods
170
- /**********************************************************
237
+ /**********************************************************************
171
238
*/
172
239
173
240
protected Map <Class <?>, MutableConfigOverride > _newMap () {
0 commit comments