Register automatically Jackson's JDK 8 module when available
Issue: SPR-12983
This commit is contained in:
@@ -715,6 +715,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-jdk8:${jackson2Version}")
|
||||
testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -664,6 +664,17 @@ public class Jackson2ObjectMapperBuilder {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void registerWellKnownModulesIfAvailable(ObjectMapper objectMapper) {
|
||||
// Java 8 java.util.Optional class present?
|
||||
if (ClassUtils.isPresent("java.util.Optional", this.moduleClassLoader)) {
|
||||
try {
|
||||
Class<? extends Module> jdk8Module = (Class<? extends Module>)
|
||||
ClassUtils.forName("com.fasterxml.jackson.datatype.jdk8.Jdk8Module", this.moduleClassLoader);
|
||||
objectMapper.registerModule(BeanUtils.instantiate(jdk8Module));
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
// jackson-datatype-jdk8 not available
|
||||
}
|
||||
}
|
||||
// Java 8 java.time package present?
|
||||
if (ClassUtils.isPresent("java.time.LocalDate", this.moduleClassLoader)) {
|
||||
try {
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFilter;
|
||||
@@ -238,9 +239,13 @@ public class Jackson2ObjectMapperBuilderTests {
|
||||
@Test
|
||||
public void defaultModules() throws JsonProcessingException, UnsupportedEncodingException {
|
||||
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
|
||||
|
||||
Long timestamp = 1322903730000L;
|
||||
DateTime dateTime = new DateTime(timestamp, DateTimeZone.UTC);
|
||||
assertEquals(timestamp.toString(), new String(objectMapper.writeValueAsBytes(dateTime), "UTF-8"));
|
||||
|
||||
Optional<String> optional = Optional.of("test");
|
||||
assertEquals("\"test\"", new String(objectMapper.writeValueAsBytes(optional), "UTF-8"));
|
||||
}
|
||||
|
||||
@Test // SPR-12634
|
||||
|
||||
Reference in New Issue
Block a user