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 85c6601838..b457aa7126 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 @@ -162,6 +162,7 @@ public class JacksonAutoConfiguration { configureDateFormat(builder); configurePropertyNamingStrategy(builder); configureModules(builder); + configureLocale(builder); return builder; } @@ -237,6 +238,13 @@ public class JacksonAutoConfiguration { builder.modulesToInstall(moduleBeans.toArray(new Module[moduleBeans.size()])); } + private void configureLocale(Jackson2ObjectMapperBuilder builder) { + String locale = this.jacksonProperties.getLocale(); + if (locale != null) { + builder.locale(locale); + } + } + private static Collection getBeans(ListableBeanFactory beanFactory, Class type) { return BeanFactoryUtils.beansOfTypeIncludingAncestors(beanFactory, type) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonProperties.java index df69f33baa..af98b099eb 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonProperties.java @@ -95,6 +95,11 @@ public class JacksonProperties { */ private TimeZone timeZone = null; + /** + * Locale used for formatting. + */ + private String locale; + public String getDateFormat() { return this.dateFormat; } @@ -155,4 +160,12 @@ public class JacksonProperties { this.timeZone = timeZone; } + public String getLocale() { + return this.locale; + } + + public void setLocale(String locale) { + this.locale = locale; + } + } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java index 186d5e3e11..9f7ce9b7bf 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java @@ -381,6 +381,7 @@ public class JacksonAutoConfigurationTests { "spring.jackson.time-zone:America/Los_Angeles"); EnvironmentTestUtils.addEnvironment(this.context, "spring.jackson.date-format:zzzz"); + EnvironmentTestUtils.addEnvironment(this.context, "spring.jackson.locale:en"); this.context.refresh(); ObjectMapper objectMapper = this.context.getBean( Jackson2ObjectMapperBuilder.class).build(); @@ -402,6 +403,21 @@ public class JacksonAutoConfigurationTests { assertEquals("\"GMT+10:00\"", objectMapper.writeValueAsString(date)); } + @Test + public void customLocale() throws JsonProcessingException { + this.context.register(JacksonAutoConfiguration.class); + EnvironmentTestUtils.addEnvironment(this.context, "spring.jackson.locale:de"); + EnvironmentTestUtils.addEnvironment(this.context, + "spring.jackson.date-format:zzzz"); + this.context.refresh(); + ObjectMapper objectMapper = this.context + .getBean(Jackson2ObjectMapperBuilder.class).build(); + + DateTime dateTime = new DateTime(1436966242231L, DateTimeZone.UTC); + assertEquals("\"Koordinierte Universalzeit\"", + objectMapper.writeValueAsString(dateTime)); + } + @Configuration protected static class MockObjectMapperConfig {