From c053540b03587ebfa6a2ee5e0421049ec5db7b3a Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Fri, 14 Nov 2014 01:25:34 +0100 Subject: [PATCH 1/2] Use HttpMapper properties only if defined See gh-1923 --- .../jackson/JacksonAutoConfiguration.java | 3 ++- .../autoconfigure/web/HttpMapperProperties.java | 13 +++++++------ .../web/HttpMessageConvertersAutoConfiguration.java | 8 ++++++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java index b49834e9281..dd62ad51045 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java @@ -109,7 +109,8 @@ public class JacksonAutoConfiguration { @ConditionalOnMissingBean(Jackson2ObjectMapperBuilder.class) public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); - if (this.httpMapperProperties.isJsonSortKeys()) { + Boolean isJsonSortKeys = this.httpMapperProperties.isJsonSortKeys(); + if (isJsonSortKeys != null && isJsonSortKeys) { builder.featuresToEnable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS); } configureFeatures(builder, this.jacksonProperties.getDeserialization()); diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMapperProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMapperProperties.java index a42188ec35c..c6b3849fc05 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMapperProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMapperProperties.java @@ -24,27 +24,28 @@ import org.springframework.http.converter.HttpMessageConverter; * * @author Dave Syer * @author Piotr Maj + * @author Sebastien Deleuze */ @ConfigurationProperties(prefix = "http.mappers", ignoreUnknownFields = false) public class HttpMapperProperties { - private boolean jsonPrettyPrint; + private Boolean jsonPrettyPrint; - private boolean jsonSortKeys; + private Boolean jsonSortKeys; - public void setJsonPrettyPrint(boolean jsonPrettyPrint) { + public void setJsonPrettyPrint(Boolean jsonPrettyPrint) { this.jsonPrettyPrint = jsonPrettyPrint; } - public boolean isJsonPrettyPrint() { + public Boolean isJsonPrettyPrint() { return this.jsonPrettyPrint; } - public void setJsonSortKeys(boolean jsonSortKeys) { + public void setJsonSortKeys(Boolean jsonSortKeys) { this.jsonSortKeys = jsonSortKeys; } - public boolean isJsonSortKeys() { + public Boolean isJsonSortKeys() { return this.jsonSortKeys; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java index b7d8884fac5..42146b7e575 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java @@ -78,7 +78,9 @@ public class HttpMessageConvertersAutoConfiguration { ObjectMapper objectMapper) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(objectMapper); - converter.setPrettyPrint(this.properties.isJsonPrettyPrint()); + if (this.properties.isJsonPrettyPrint() != null) { + converter.setPrettyPrint(this.properties.isJsonPrettyPrint()); + } return converter; } @@ -99,7 +101,9 @@ public class HttpMessageConvertersAutoConfiguration { Jackson2ObjectMapperBuilder builder) { MappingJackson2XmlHttpMessageConverter converter = new MappingJackson2XmlHttpMessageConverter(); converter.setObjectMapper(builder.createXmlMapper(true).build()); - converter.setPrettyPrint(this.properties.isJsonPrettyPrint()); + if (this.properties.isJsonPrettyPrint() != null) { + converter.setPrettyPrint(this.properties.isJsonPrettyPrint()); + } return converter; } From b8d6b34038e14d598e646f8296dab6be6054d6a2 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 18 Nov 2014 11:17:07 +0000 Subject: [PATCH 2/2] =?UTF-8?q?Test=20that=20HttpMapper=20properties=20are?= =?UTF-8?q?=20only=20used=20when=20they=E2=80=99re=20defined?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes gh-1923 --- ...ssageConvertersAutoConfigurationTests.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java index 5ad7080e970..8c9ec03593d 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfigurationTests.java @@ -21,6 +21,8 @@ import java.util.List; import org.junit.After; import org.junit.Test; +import org.springframework.beans.DirectFieldAccessor; +import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -34,6 +36,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** @@ -155,6 +158,30 @@ public class HttpMessageConvertersAutoConfigurationTests { assertConverterBeanRegisteredWithHttpMessageConverters(StringHttpMessageConverter.class); } + @Test + public void httpMapperPropertiesAreNotAppliedWhenNotConfigured() throws Exception { + this.context.register(JacksonObjectMapperConfig.class, + HttpMessageConvertersAutoConfiguration.class); + this.context.refresh(); + MappingJackson2HttpMessageConverter converter = this.context + .getBean(MappingJackson2HttpMessageConverter.class); + assertNull(new DirectFieldAccessor(converter) + .getPropertyValue("prettyPrint")); + } + + @Test + public void httpMapperPropertiesAreAppliedWhenConfigured() throws Exception { + this.context.register(JacksonObjectMapperConfig.class, + HttpMessageConvertersAutoConfiguration.class); + EnvironmentTestUtils.addEnvironment(this.context, + "http.mappers.jsonPrettyPrint:true"); + this.context.refresh(); + MappingJackson2HttpMessageConverter converter = this.context + .getBean(MappingJackson2HttpMessageConverter.class); + assertTrue((Boolean) new DirectFieldAccessor(converter) + .getPropertyValue("prettyPrint")); + } + private void assertConverterBeanExists(Class type, String beanName) { assertEquals(1, this.context.getBeansOfType(type).size()); List beanNames = Arrays.asList(this.context.getBeanDefinitionNames());