diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index 915b9dba95e..b68ec1460e0 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -128,16 +128,16 @@ public class ResolvableType implements Serializable { private Class resolved; @Nullable - private volatile ResolvableType superType; + private transient volatile ResolvableType superType; @Nullable - private volatile ResolvableType[] interfaces; + private transient volatile ResolvableType[] interfaces; @Nullable - private volatile ResolvableType[] generics; + private transient volatile ResolvableType[] generics; @Nullable - private volatile Boolean unresolvableGenerics; + private transient volatile Boolean unresolvableGenerics; /** diff --git a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java index 104e059ceec..c01ade2347b 100644 --- a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java +++ b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java @@ -1335,6 +1335,22 @@ class ResolvableTypeTests { assertThat(deserializedNone).isSameAs(ResolvableType.NONE); } + @Test + void serializeWithCachedState() throws Exception { + ResolvableType type = ResolvableType.forClass(List.class); + testSerialization(type); + type.getSuperType(); + type.getInterfaces(); + type.getGenerics(); + type.hasUnresolvableGenerics(); + testSerialization(type); + type.getSuperType(); + type.getInterfaces(); + type.getGenerics(); + type.hasUnresolvableGenerics(); + testSerialization(type); + } + @Test void canResolveVoid() { ResolvableType type = ResolvableType.forClass(void.class);