From 2e74251d1b0d5db01201f2cd04047b1dbde094ea Mon Sep 17 00:00:00 2001 From: Piotr Maj Date: Fri, 14 Mar 2014 21:36:49 -0700 Subject: [PATCH] Add support for sorting json keys Add `jsonSortKeys` property to HttpMapperProperties. Fixes gh-498 --- .../autoconfigure/web/HttpMapperProperties.java | 15 ++++++++++++++- .../HttpMessageConvertersAutoConfiguration.java | 9 ++++++++- .../asciidoc/appendix-application-properties.adoc | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) 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 3c1750f2109..168b93978a5 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 @@ -21,11 +21,16 @@ import org.springframework.http.converter.HttpMessageConverter; /** * Configuration properties to configure {@link HttpMessageConverter}s. + * + * @author Dave Syer + * @author Piotr Maj */ @ConfigurationProperties(name = "http.mappers", ignoreUnknownFields = false) public class HttpMapperProperties { - private boolean jsonPrettyPrint = false; + private boolean jsonPrettyPrint; + + private boolean jsonSortKeys; public void setJsonPrettyPrint(boolean jsonPrettyPrint) { this.jsonPrettyPrint = jsonPrettyPrint; @@ -35,4 +40,12 @@ public class HttpMapperProperties { return this.jsonPrettyPrint; } + public void setJsonSortKeys(boolean jsonSortKeys) { + this.jsonSortKeys = jsonSortKeys; + } + + 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 4340e225f12..d6b56f4860d 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 @@ -38,12 +38,14 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; /** * {@link EnableAutoConfiguration Auto-configuration} for {@link HttpMessageConverter}s. * * @author Dave Syer * @author Christian Dupuis + * @author Piotr Maj */ @Configuration @ConditionalOnClass(HttpMessageConverter.class) @@ -87,7 +89,12 @@ public class HttpMessageConvertersAutoConfiguration { @ConditionalOnMissingBean @Primary public ObjectMapper jacksonObjectMapper() { - return new ObjectMapper(); + ObjectMapper objectMapper = new ObjectMapper(); + if (this.properties.isJsonSortKeys()) { + objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, + true); + } + return objectMapper; } @Bean diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 82098d8adf5..c169c3190aa 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -64,6 +64,7 @@ server.tomcat.max-threads = 0 # number of threads in protocol handler # SPRING MVC (HttpMapperProperties) http.mappers.json-pretty-print=false # pretty print JSON +http.mappers.json-sort-keys=falose # sort keys spring.view.prefix= # MVC view prefix spring.view.suffix= # ... and suffix spring.resources.cache-period= # cache timeouts in headers sent to browser