From 31c894e880dd6e92d61cb42d5193f628936f4715 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sun, 11 Sep 2016 22:53:18 +0200 Subject: [PATCH] DATAREST-607 - Register Jackson Hibernate 5 module automatically if present. Just as we do for the Jackson Hibernate integration for Hibernate 4, we now register the module for Hibernate 5 as well. --- spring-data-rest-webmvc/pom.xml | 11 ++++-- .../webmvc/json/Jackson2DatatypeHelper.java | 36 +++++++++++++++---- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/spring-data-rest-webmvc/pom.xml b/spring-data-rest-webmvc/pom.xml index 39c9d71f7..452876350 100644 --- a/spring-data-rest-webmvc/pom.xml +++ b/spring-data-rest-webmvc/pom.xml @@ -64,6 +64,13 @@ true + + com.fasterxml.jackson.datatype + jackson-datatype-hibernate5 + ${jackson} + true + + org.hibernate hibernate-core @@ -79,7 +86,7 @@ ${jackson} true - + @@ -112,7 +119,7 @@ ${jsonpath} test - + org.springframework.data spring-data-keyvalue diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/Jackson2DatatypeHelper.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/Jackson2DatatypeHelper.java index 171d39e94..424b3f3d0 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/Jackson2DatatypeHelper.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/Jackson2DatatypeHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 the original author or authors. + * Copyright 2013-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import org.springframework.util.ClassUtils; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module; +import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; import com.fasterxml.jackson.datatype.joda.JodaModule; /** @@ -35,15 +36,21 @@ public class Jackson2DatatypeHelper { Jackson2DatatypeHelper.class.getClassLoader()); private static final boolean IS_HIBERNATE4_MODULE_AVAILABLE = ClassUtils.isPresent( "com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module", Jackson2DatatypeHelper.class.getClassLoader()); + private static final boolean IS_HIBERNATE5_MODULE_AVAILABLE = ClassUtils.isPresent( + "com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module", Jackson2DatatypeHelper.class.getClassLoader()); - private static final boolean IS_JODA_MODULE_AVAILABLE = ClassUtils.isPresent( - "com.fasterxml.jackson.datatype.joda.JodaModule", Jackson2DatatypeHelper.class.getClassLoader()); + private static final boolean IS_JODA_MODULE_AVAILABLE = ClassUtils + .isPresent("com.fasterxml.jackson.datatype.joda.JodaModule", Jackson2DatatypeHelper.class.getClassLoader()); public static void configureObjectMapper(ObjectMapper mapper) { // Hibernate types - if (IS_HIBERNATE_AVAILABLE && Hibernate4Checker.isHibernate4() && IS_HIBERNATE4_MODULE_AVAILABLE) { - Hibernate4ModuleRegistrar.registerModule(mapper); + if (IS_HIBERNATE_AVAILABLE && HibernateVersions.isHibernate4() && IS_HIBERNATE4_MODULE_AVAILABLE) { + new Hibernate4ModuleRegistrar().registerModule(mapper); + } + + if (IS_HIBERNATE_AVAILABLE && HibernateVersions.isHibernate5() && IS_HIBERNATE5_MODULE_AVAILABLE) { + new Hibernate5ModuleRegistrar().registerModule(mapper); } // JODA time @@ -52,16 +59,20 @@ public class Jackson2DatatypeHelper { } } - private static class Hibernate4Checker { + private static class HibernateVersions { public static boolean isHibernate4() { return Version.getVersionString().startsWith("4"); } + + public static boolean isHibernate5() { + return Version.getVersionString().startsWith("5"); + } } private static class Hibernate4ModuleRegistrar { - public static void registerModule(ObjectMapper mapper) { + public void registerModule(ObjectMapper mapper) { Hibernate4Module module = new Hibernate4Module(); module.enable(Hibernate4Module.Feature.FORCE_LAZY_LOADING); @@ -70,6 +81,17 @@ public class Jackson2DatatypeHelper { } } + private static class Hibernate5ModuleRegistrar { + + public void registerModule(ObjectMapper mapper) { + + Hibernate5Module module = new Hibernate5Module(); + module.enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING); + + mapper.registerModule(module); + } + } + private static class JodaModuleRegistrar { public static void registerModule(ObjectMapper mapper) {