Skip to content

Commit 88d8f84

Browse files
Return Jackson3 serializer for RedisSerializer.json()
Updated test to cover Jackson3 based serializer variants. See: #3219
1 parent 97e36a5 commit 88d8f84

File tree

5 files changed

+27
-8
lines changed

5 files changed

+27
-8
lines changed

src/main/java/org/springframework/data/redis/serializer/GenericJacksonJsonRedisSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ protected JavaType resolveType(byte[] source, Class<?> type) throws IOException
479479
JsonNode root = readTree(source);
480480
JsonNode jsonNode = root.get(hintName.get());
481481

482-
if (jsonNode.isString() && jsonNode.asString() != null) {
482+
if (jsonNode != null && jsonNode.isString() && jsonNode.asString() != null) {
483483
return typeFactory.get().constructFromCanonical(jsonNode.asString());
484484
}
485485

src/main/java/org/springframework/data/redis/serializer/RedisSerializer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ static RedisSerializer<Object> java(@Nullable ClassLoader classLoader) {
5555

5656
/**
5757
* Obtain a {@link RedisSerializer} that can read and write JSON using
58-
* <a href="https://github.com/FasterXML/jackson-core">Jackson</a>.
58+
* <a href="https://github.com/FasterXML/jackson-core">Jackson</a> with default typing enabled.
5959
*
6060
* @return never {@literal null}.
6161
* @since 2.1
6262
*/
6363
static RedisSerializer<Object> json() {
64-
return new GenericJackson2JsonRedisSerializer();
64+
return GenericJacksonJsonRedisSerializer
65+
.create(it -> it.enableSpringCacheNullValueSupport().enableUnsafeDefaultTyping());
6566
}
6667

6768
/**

src/test/java/org/springframework/data/redis/cache/CacheTestParams.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
3131
import org.springframework.data.redis.connection.lettuce.extension.LettuceConnectionFactoryExtension;
3232
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
33+
import org.springframework.data.redis.serializer.GenericJacksonJsonRedisSerializer;
3334
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
3435
import org.springframework.data.redis.serializer.OxmSerializer;
3536
import org.springframework.data.redis.serializer.RedisSerializer;
@@ -89,10 +90,13 @@ static Collection<Object[]> connectionFactoriesAndSerializers() {
8990

9091
OxmSerializer oxmSerializer = XstreamOxmSerializerSingleton.getInstance();
9192
GenericJackson2JsonRedisSerializer jackson2Serializer = new GenericJackson2JsonRedisSerializer();
93+
GenericJacksonJsonRedisSerializer jacksonSerializer = GenericJacksonJsonRedisSerializer
94+
.create(it -> it.enableSpringCacheNullValueSupport().enableUnsafeDefaultTyping());
9295
JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer();
9396

9497
return connectionFactories().stream().flatMap(factory -> Arrays.asList( //
9598
new Object[] { factory, new FixDamnedJunitParameterizedNameForRedisSerializer(jdkSerializer) }, //
99+
new Object[] { factory, new FixDamnedJunitParameterizedNameForRedisSerializer(jacksonSerializer) }, //
96100
new Object[] { factory, new FixDamnedJunitParameterizedNameForRedisSerializer(jackson2Serializer) }, //
97101
new Object[] { factory, new FixDamnedJunitParameterizedNameForRedisSerializer(oxmSerializer) }).stream())
98102
.collect(Collectors.toList());

src/test/java/org/springframework/data/redis/core/DefaultReactiveStreamOperationsIntegrationTests.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.springframework.data.redis.connection.stream.StreamRecords;
4949
import org.springframework.data.redis.core.ReactiveOperationsTestParams.Fixture;
5050
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
51+
import org.springframework.data.redis.serializer.GenericJacksonJsonRedisSerializer;
5152
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
5253
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
5354
import org.springframework.data.redis.serializer.OxmSerializer;
@@ -143,6 +144,7 @@ void addShouldAddReadSimpleMessage() {
143144

144145
assumeTrue(!(serializer instanceof Jackson2JsonRedisSerializer)
145146
&& !(serializer instanceof GenericJackson2JsonRedisSerializer)
147+
&& !(serializer instanceof GenericJacksonJsonRedisSerializer)
146148
&& !(serializer instanceof JdkSerializationRedisSerializer) && !(serializer instanceof OxmSerializer));
147149

148150
K key = keyFactory.instance();
@@ -165,7 +167,8 @@ void addShouldAddReadSimpleMessage() {
165167
void addShouldAddReadSimpleMessageWithRawSerializer() {
166168

167169
assumeTrue(!(serializer instanceof Jackson2JsonRedisSerializer)
168-
&& !(serializer instanceof GenericJackson2JsonRedisSerializer));
170+
&& !(serializer instanceof GenericJackson2JsonRedisSerializer)
171+
&& !(serializer instanceof GenericJacksonJsonRedisSerializer));
169172

170173
SerializationPair<K> keySerializer = redisTemplate.getSerializationContext().getKeySerializationPair();
171174

@@ -223,6 +226,7 @@ void addMaxLenShouldLimitSimpleMessagesSize() {
223226

224227
assumeTrue(!(serializer instanceof Jackson2JsonRedisSerializer)
225228
&& !(serializer instanceof GenericJackson2JsonRedisSerializer)
229+
&& !(serializer instanceof GenericJacksonJsonRedisSerializer)
226230
&& !(serializer instanceof JdkSerializationRedisSerializer) && !(serializer instanceof OxmSerializer));
227231

228232
K key = keyFactory.instance();
@@ -249,7 +253,8 @@ void addMaxLenShouldLimitSimpleMessagesSize() {
249253
void addMaxLenShouldLimitSimpleMessageWithRawSerializerSize() {
250254

251255
assumeTrue(!(serializer instanceof Jackson2JsonRedisSerializer)
252-
&& !(serializer instanceof GenericJackson2JsonRedisSerializer));
256+
&& !(serializer instanceof GenericJackson2JsonRedisSerializer)
257+
&& !(serializer instanceof GenericJacksonJsonRedisSerializer));
253258

254259
SerializationPair<K> keySerializer = redisTemplate.getSerializationContext().getKeySerializationPair();
255260

@@ -378,8 +383,9 @@ void reverseRangeShouldReportMessages() {
378383
@Test // DATAREDIS-864
379384
void reverseRangeShouldConvertSimpleMessages() {
380385

381-
assumeTrue(!(serializer instanceof Jackson2JsonRedisSerializer)
382-
&& !(serializer instanceof GenericJackson2JsonRedisSerializer));
386+
assumeTrue(!(serializer instanceof Jackson2JsonRedisSerializer)
387+
&& !(serializer instanceof GenericJackson2JsonRedisSerializer)
388+
&& !(serializer instanceof GenericJacksonJsonRedisSerializer));
383389

384390
K key = keyFactory.instance();
385391
HK hashKey = hashKeyFactory.instance();

src/test/java/org/springframework/data/redis/core/ReactiveOperationsTestParams.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
3434
import org.springframework.data.redis.connection.lettuce.extension.LettuceConnectionFactoryExtension;
3535
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
36+
import org.springframework.data.redis.serializer.GenericJacksonJsonRedisSerializer;
3637
import org.springframework.data.redis.serializer.GenericToStringSerializer;
3738
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
3839
import org.springframework.data.redis.serializer.JacksonJsonRedisSerializer;
@@ -109,6 +110,11 @@ RedisSerializationContext.<String, Double> newSerializationContext(jdkSerializat
109110
ReactiveRedisTemplate<String, Person> genericJackson2JsonPersonTemplate = new ReactiveRedisTemplate(
110111
lettuceConnectionFactory, RedisSerializationContext.fromSerializer(genericJackson2JsonSerializer));
111112

113+
GenericJacksonJsonRedisSerializer genericJacksonJsonSerializer = GenericJacksonJsonRedisSerializer
114+
.create(it -> it.enableSpringCacheNullValueSupport().enableUnsafeDefaultTyping());
115+
ReactiveRedisTemplate<String, Person> genericJacksonJsonPersonTemplate = new ReactiveRedisTemplate(
116+
lettuceConnectionFactory, RedisSerializationContext.fromSerializer(genericJacksonJsonSerializer));
117+
112118
List<Fixture<?, ?>> list = Arrays.asList( //
113119
new Fixture<>(stringTemplate, stringFactory, stringFactory, stringRedisSerializer, "String"), //
114120
new Fixture<>(objectTemplate, personFactory, personFactory, jdkSerializationRedisSerializer, "Person/JDK"), //
@@ -122,7 +128,9 @@ RedisSerializationContext.<String, Double> newSerializationContext(jdkSerializat
122128
new Fixture<>(jackson2JsonPersonTemplate, stringFactory, personFactory, jackson2JsonSerializer, "Jackson2"), //
123129
new Fixture<>(jackson3JsonPersonTemplate, stringFactory, personFactory, jackson2JsonSerializer, "Jackson3"), //
124130
new Fixture<>(genericJackson2JsonPersonTemplate, stringFactory, personFactory, genericJackson2JsonSerializer,
125-
"Generic Jackson 2"));
131+
"Generic Jackson 2"),
132+
new Fixture<>(genericJacksonJsonPersonTemplate, stringFactory, personFactory, genericJacksonJsonSerializer,
133+
"Generic Jackson 3"));
126134

127135
if (clusterAvailable()) {
128136

0 commit comments

Comments
 (0)