From cccf5f65f5e8ee58530b94acae7feb0049ffbb05 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Mon, 17 Aug 2015 09:09:22 -0400 Subject: [PATCH] Register jackson-datatype-jdk7 module when using Java 7 Issue: SPR-13354 --- build.gradle | 1 + .../converter/json/Jackson2ObjectMapperBuilder.java | 12 ++++++++++++ .../json/Jackson2ObjectMapperBuilderTests.java | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/build.gradle b/build.gradle index 36168746d0a..d23f93c2012 100644 --- a/build.gradle +++ b/build.gradle @@ -730,6 +730,7 @@ project("spring-web") { exclude group: "org.apache.taglibs", module: "taglibs-standard-spec" } testCompile("com.fasterxml.jackson.datatype:jackson-datatype-joda:${jackson2Version}") + testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk7:${jackson2Version}") testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2Version}") testRuntime("com.sun.mail:javax.mail:${javamailVersion}") } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java index 508c61e3546..b6c48e4ae4b 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java @@ -663,6 +663,18 @@ public class Jackson2ObjectMapperBuilder { @SuppressWarnings("unchecked") private void registerWellKnownModulesIfAvailable(ObjectMapper objectMapper) { + // Java 7 java.nio.file.Path class present? + if (ClassUtils.isPresent("java.nio.file.Path", this.moduleClassLoader)) { + try { + Class jdk7Module = (Class) + ClassUtils.forName("com.fasterxml.jackson.datatype.jdk7.Jdk7Module", this.moduleClassLoader); + objectMapper.registerModule(BeanUtils.instantiate(jdk7Module)); + } + catch (ClassNotFoundException ex) { + // jackson-datatype-jdk7 not available + } + } + // Java 8 java.util.Optional class present? if (ClassUtils.isPresent("java.util.Optional", this.moduleClassLoader)) { try { diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java index 811fdbe95cd..1cda3670a77 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java @@ -18,6 +18,8 @@ package org.springframework.http.converter.json; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; @@ -244,6 +246,9 @@ public class Jackson2ObjectMapperBuilderTests { DateTime dateTime = new DateTime(timestamp, DateTimeZone.UTC); assertEquals(timestamp.toString(), new String(objectMapper.writeValueAsBytes(dateTime), "UTF-8")); + Path file = Paths.get("foo"); + assertEquals("\"foo\"", new String(objectMapper.writeValueAsBytes(file), "UTF-8")); + Optional optional = Optional.of("test"); assertEquals("\"test\"", new String(objectMapper.writeValueAsBytes(optional), "UTF-8")); }