From 5683ff211fd0e25a95f403a8d1f2074854a76d58 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 21 Feb 2018 09:58:12 +0300 Subject: [PATCH] JsonJacksonMapCodec improved. #1260 --- redisson/pom.xml | 6 ++++ .../client/codec/JsonJacksonMapCodec.java | 33 ++++++++++++------- .../org/redisson/codec/JsonJacksonCodec.java | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) 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 @@ 8.0.48 test + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.7.9 + test + org.apache.httpcomponents fluent-hc 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