Resolve target type of wrapped one in custom StdTypeResolverBuilder.

This commit makes sure to avoid typing of primitive wrapper types wrapped inside what is considered a jackson ReferenceType (such as Optional, AtomicReference,...).

Original Pull Request: #2364
This commit is contained in:
Christoph Strobl
2022-07-14 12:29:25 +02:00
parent b43c98a1a5
commit 7f368c48ed
2 changed files with 112 additions and 10 deletions

View File

@@ -349,21 +349,33 @@ public class GenericJackson2JsonRedisSerializer implements RedisSerializer<Objec
return true;
}
while (t.isArrayType()) {
t = t.getContentType();
}
t = resolveArrayOrWrapper(t);
if (ClassUtils.isPrimitiveOrWrapper(t.getRawClass())) {
return false;
}
// 19-Apr-2016, tatu: ReferenceType like Optional also requires similar handling:
while (t.isReferenceType()) {
t = t.getReferencedType();
}
// [databind#88] Should not apply to JSON tree models:
return !TreeNode.class.isAssignableFrom(t.getRawClass());
}
private JavaType resolveArrayOrWrapper(JavaType type) {
while (type.isArrayType()) {
type = type.getContentType();
if (type.isReferenceType()) {
type = resolveArrayOrWrapper(type);
}
}
while (type.isReferenceType()) {
type = type.getReferencedType();
if (type.isArrayType()) {
type = resolveArrayOrWrapper(type);
}
}
return type;
}
}
}