diff --git a/redisson/pom.xml b/redisson/pom.xml
index 312e46b30..6b6e8b342 100644
--- a/redisson/pom.xml
+++ b/redisson/pom.xml
@@ -133,6 +133,12 @@
             <version>8.0.48</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+            <version>2.7.9</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>fluent-hc</artifactId>
diff --git a/redisson/src/main/java/org/redisson/client/codec/JsonJacksonMapCodec.java b/redisson/src/main/java/org/redisson/client/codec/JsonJacksonMapCodec.java
index 6461c005d..9fae54634 100644
--- a/redisson/src/main/java/org/redisson/client/codec/JsonJacksonMapCodec.java
+++ b/redisson/src/main/java/org/redisson/client/codec/JsonJacksonMapCodec.java
@@ -41,7 +41,6 @@ import io.netty.buffer.ByteBufOutputStream;
  */
 public class JsonJacksonMapCodec extends JsonJacksonCodec {
     
-    private final ObjectMapper mapper;
     private Class<?> keyClass;
     private Class<?> valueClass;
     private TypeReference<?> keyTypeReference;
@@ -53,7 +52,7 @@ public class JsonJacksonMapCodec extends JsonJacksonCodec {
             ByteBuf out = ByteBufAllocator.DEFAULT.buffer();
             try {
                 ByteBufOutputStream os = new ByteBufOutputStream(out);
-                mapper.writeValue((OutputStream)os, in);
+                mapObjectMapper.writeValue((OutputStream)os, in);
                 return os.buffer();
             } catch (IOException e) {
                 out.release();
@@ -66,9 +65,9 @@ public class JsonJacksonMapCodec extends JsonJacksonCodec {
         @Override
         public Object decode(ByteBuf buf, State state) throws IOException {
             if (valueClass != null) {
-                return mapper.readValue((InputStream)new ByteBufInputStream(buf), valueClass);
+                return mapObjectMapper.readValue((InputStream)new ByteBufInputStream(buf), valueClass);
             }
-            return mapper.readValue((InputStream)new ByteBufInputStream(buf), valueTypeReference);
+            return mapObjectMapper.readValue((InputStream)new ByteBufInputStream(buf), valueTypeReference);
         }
     };
     
@@ -76,27 +75,39 @@ public class JsonJacksonMapCodec extends JsonJacksonCodec {
         @Override
         public Object decode(ByteBuf buf, State state) throws IOException {
             if (keyClass != null) {
-                return mapper.readValue((InputStream)new ByteBufInputStream(buf), keyClass);
+                return mapObjectMapper.readValue((InputStream)new ByteBufInputStream(buf), keyClass);
             }
-            return mapper.readValue((InputStream)new ByteBufInputStream(buf), keyTypeReference);
+            return mapObjectMapper.readValue((InputStream)new ByteBufInputStream(buf), keyTypeReference);
         }
     };
 
     public JsonJacksonMapCodec(Class<?> keyClass, Class<?> valueClass) {
-        this(null, null, keyClass, valueClass);
+        this(null, null, keyClass, valueClass, new ObjectMapper());
+    }
+    
+    public JsonJacksonMapCodec(Class<?> keyClass, Class<?> valueClass, ObjectMapper mapper) {
+        this(null, null, keyClass, valueClass, mapper);
     }
     
     public JsonJacksonMapCodec(TypeReference<?> keyTypeReference, TypeReference<?> valueTypeReference) {
-        this(keyTypeReference, valueTypeReference, null, null);
+        this(keyTypeReference, valueTypeReference, null, null, new ObjectMapper());
+    }
+    
+    public JsonJacksonMapCodec(TypeReference<?> keyTypeReference, TypeReference<?> valueTypeReference, ObjectMapper mapper) {
+        this(keyTypeReference, valueTypeReference, null, null, mapper);
     }
 
-    JsonJacksonMapCodec(TypeReference<?> keyTypeReference, TypeReference<?> valueTypeReference, Class<?> keyClass, Class<?> valueClass) {
+    JsonJacksonMapCodec(TypeReference<?> keyTypeReference, TypeReference<?> valueTypeReference, Class<?> keyClass, Class<?> valueClass, ObjectMapper mapper) {
+        super(mapper);
         this.keyTypeReference = keyTypeReference;
         this.valueTypeReference = valueTypeReference;
         this.keyClass = keyClass;
         this.valueClass = valueClass;
-        this.mapper = new ObjectMapper();
-        init(this.mapper);
+    }
+    
+    @Override
+    protected void initTypeInclusion(ObjectMapper mapObjectMapper) {
+        // avoid type inclusion
     }
 
     @Override
diff --git a/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java b/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java
index 792e140c1..2ad1fb04d 100755
--- a/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java
+++ b/redisson/src/main/java/org/redisson/codec/JsonJacksonCodec.java
@@ -65,7 +65,7 @@ public class JsonJacksonCodec implements Codec {
         
     }
     
-    private final ObjectMapper mapObjectMapper;
+    protected final ObjectMapper mapObjectMapper;
 
     private final Encoder encoder = new Encoder() {
         @Override