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