Skip to content

Commit 77abe07

Browse files
committed
Set Jackson DEFAULT_VIEW_INCLUSION property to false by default
Issue: SPR-12179
1 parent 42aef5f commit 77abe07

File tree

11 files changed

+35
-17
lines changed

11 files changed

+35
-17
lines changed

spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@
4747
/**
4848
* A builder used to create {@link ObjectMapper} instances with a fluent API.
4949
*
50+
* <p>It customizes Jackson defaults properties with the following ones:
51+
* <ul>
52+
* <li>{@link MapperFeature#DEFAULT_VIEW_INCLUSION} is disabled</li>
53+
* <li>{@link DeserializationFeature#FAIL_ON_UNKNOWN_PROPERTIES} is disabled</li>
54+
* </ul>
55+
*
5056
* <p>Note that Jackson's JSR-310 and Joda-Time support modules will be registered automatically
5157
* when available (and when Java 8 and Joda-Time themselves are available, respectively).
5258
*
@@ -384,6 +390,9 @@ public <T extends ObjectMapper> T build() {
384390
this.objectMapper.registerModule(module);
385391
}
386392

393+
if(!features.containsKey(MapperFeature.DEFAULT_VIEW_INCLUSION)) {
394+
configureFeature(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
395+
}
387396
if(!features.containsKey(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)) {
388397
configureFeature(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
389398
}

spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@
5252
* {@link XmlMapper} ({@code createXmlMapper} property set to true) with setters
5353
* to enable or disable Jackson features from within XML configuration.
5454
*
55+
* <p>It customizes Jackson defaults properties with the following ones:
56+
* <ul>
57+
* <li>{@link MapperFeature#DEFAULT_VIEW_INCLUSION} is disabled</li>
58+
* <li>{@link DeserializationFeature#FAIL_ON_UNKNOWN_PROPERTIES} is disabled</li>
59+
* </ul>
60+
*
5561
* <p>Example usage with
5662
* {@link MappingJackson2HttpMessageConverter}:
5763
*
@@ -413,6 +419,9 @@ public void afterPropertiesSet() {
413419
this.objectMapper.registerModule(module);
414420
}
415421

422+
if(!features.containsKey(MapperFeature.DEFAULT_VIEW_INCLUSION)) {
423+
configureFeature(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
424+
}
416425
if(!features.containsKey(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)) {
417426
configureFeature(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
418427
}

spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void unknownFeature() {
8080
public void defaultProperties() {
8181
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
8282
assertNotNull(objectMapper);
83-
assertTrue(objectMapper.isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
83+
assertFalse(objectMapper.isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
8484
assertFalse(objectMapper.isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
8585
assertTrue(objectMapper.isEnabled(MapperFeature.AUTO_DETECT_FIELDS));
8686
assertTrue(objectMapper.isEnabled(MapperFeature.AUTO_DETECT_GETTERS));
@@ -240,7 +240,7 @@ public void completeSetup() {
240240
assertTrue(objectMapper.getFactory().isEnabled(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS));
241241

242242
assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.AUTO_DETECT_GETTERS));
243-
assertTrue(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
243+
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
244244
assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
245245
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.AUTO_DETECT_FIELDS));
246246
assertFalse(objectMapper.getFactory().isEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE));

spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public void completeSetup() {
259259
assertTrue(objectMapper.getFactory().isEnabled(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS));
260260

261261
assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.AUTO_DETECT_GETTERS));
262-
assertTrue(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
262+
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
263263
assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
264264
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.AUTO_DETECT_FIELDS));
265265
assertFalse(objectMapper.getFactory().isEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE));

spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public void jsonView() throws Exception {
255255
String result = outputMessage.getBodyAsString(Charset.forName("UTF-8"));
256256
assertThat(result, containsString("\"withView1\":\"with\""));
257257
assertThat(result, not(containsString("\"withView2\":\"with\"")));
258-
assertThat(result, containsString("\"withoutView\":\"without\""));
258+
assertThat(result, not(containsString("\"withoutView\":\"without\"")));
259259
}
260260

261261
@Test
@@ -288,7 +288,7 @@ public void jsonpAndJsonView() throws Exception {
288288
assertThat(result, endsWith(");"));
289289
assertThat(result, containsString("\"withView1\":\"with\""));
290290
assertThat(result, not(containsString("\"withView2\":\"with\"")));
291-
assertThat(result, containsString("\"withoutView\":\"without\""));
291+
assertThat(result, not(containsString("\"withoutView\":\"without\"")));
292292
}
293293

294294

spring-web/src/test/java/org/springframework/http/converter/xml/MappingJackson2XmlHttpMessageConverterTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void jsonView() throws Exception {
126126
String result = outputMessage.getBodyAsString(Charset.forName("UTF-8"));
127127
assertThat(result, containsString("<withView1>with</withView1>"));
128128
assertThat(result, not(containsString("<withView2>with</withView2>")));
129-
assertThat(result, containsString("<withoutView>without</withoutView>"));
129+
assertThat(result, not(containsString("<withoutView>without</withoutView>")));
130130
}
131131

132132
@Test

spring-web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public void jsonPostForObjectWithJacksonView() throws URISyntaxException {
226226
String s = template.postForObject(baseUrl + "/jsonpost", entity, String.class, "post");
227227
assertTrue(s.contains("\"with1\":\"with\""));
228228
assertFalse(s.contains("\"with2\":\"with\""));
229-
assertTrue(s.contains("\"without\":\"without\""));
229+
assertFalse(s.contains("\"without\":\"without\""));
230230
}
231231

232232
// SPR-12123

spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,8 @@ public void testDefaultConfig() throws Exception {
173173
for(HttpMessageConverter<?> converter : converters) {
174174
if(converter instanceof AbstractJackson2HttpMessageConverter) {
175175
ObjectMapper objectMapper = ((AbstractJackson2HttpMessageConverter)converter).getObjectMapper();
176-
assertTrue(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
177-
assertTrue(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
176+
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
177+
assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
178178
assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
179179
if(converter instanceof MappingJackson2XmlHttpMessageConverter) {
180180
assertEquals(XmlMapper.class, objectMapper.getClass());

spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ public void requestMappingHandlerAdapter() throws Exception {
162162
assertEquals(1, adapter.getMessageConverters().size());
163163
assertEquals(MappingJackson2HttpMessageConverter.class, adapter.getMessageConverters().get(0).getClass());
164164
ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter)adapter.getMessageConverters().get(0)).getObjectMapper();
165-
assertTrue(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
166-
assertTrue(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
165+
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
166+
assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
167167
assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
168168

169169
DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(adapter);

spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ public void requestMappingHandlerAdapter() throws Exception {
162162
for(HttpMessageConverter<?> converter : converters) {
163163
if(converter instanceof AbstractJackson2HttpMessageConverter) {
164164
ObjectMapper objectMapper = ((AbstractJackson2HttpMessageConverter)converter).getObjectMapper();
165-
assertTrue(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
166-
assertTrue(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
165+
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
166+
assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
167167
assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
168168
if(converter instanceof MappingJackson2XmlHttpMessageConverter) {
169169
assertEquals(XmlMapper.class, objectMapper.getClass());

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ public void jacksonJsonViewWithResponseBodyAndJsonMessageConverter() throws Exce
322322
String content = this.servletResponse.getContentAsString();
323323
assertFalse(content.contains("\"withView1\":\"with\""));
324324
assertTrue(content.contains("\"withView2\":\"with\""));
325-
assertTrue(content.contains("\"withoutView\":\"without\""));
325+
assertFalse(content.contains("\"withoutView\":\"without\""));
326326
}
327327

328328
@Test
@@ -343,7 +343,7 @@ public void jacksonJsonViewWithResponseEntityAndJsonMessageConverter() throws Ex
343343
String content = this.servletResponse.getContentAsString();
344344
assertFalse(content.contains("\"withView1\":\"with\""));
345345
assertTrue(content.contains("\"withView2\":\"with\""));
346-
assertTrue(content.contains("\"withoutView\":\"without\""));
346+
assertFalse(content.contains("\"withoutView\":\"without\""));
347347
}
348348

349349
// SPR-12149
@@ -366,7 +366,7 @@ public void jacksonJsonViewWithResponseBodyAndXmlMessageConverter() throws Excep
366366
String content = this.servletResponse.getContentAsString();
367367
assertFalse(content.contains("<withView1>with</withView1>"));
368368
assertTrue(content.contains("<withView2>with</withView2>"));
369-
assertTrue(content.contains("<withoutView>without</withoutView>"));
369+
assertFalse(content.contains("<withoutView>without</withoutView>"));
370370
}
371371

372372
// SPR-12149
@@ -389,7 +389,7 @@ public void jacksonJsonViewWithResponseEntityAndXmlMessageConverter() throws Exc
389389
String content = this.servletResponse.getContentAsString();
390390
assertFalse(content.contains("<withView1>with</withView1>"));
391391
assertTrue(content.contains("<withView2>with</withView2>"));
392-
assertTrue(content.contains("<withoutView>without</withoutView>"));
392+
assertFalse(content.contains("<withoutView>without</withoutView>"));
393393
}
394394

395395

0 commit comments

Comments
 (0)