From 7a19cbb452b7a37545d1063e1cacef884b7b6d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Thu, 27 Nov 2025 15:38:31 +0100 Subject: [PATCH] Change AbstractSmartHttpMessageConverter canRead/canWrite overrides Extending AbstractSmartHttpMessageConverter typically requires to override both Class and ResolvableType variants of canRead. This was not intended as SmartHttpMessageConverter interface has default methods doing the conversion from Class parameters to ResolvableType ones, but AbstractHttpMessageConverter overrides it. This commit changes AbstractSmartHttpMessageConverter canRead/canWrite overrides from ResolvableType to Class ones that delegate to the ResolvableType variants. It also refines AbstractJacksonHttpMessageConverter accordingly. Closes gh-35916 --- .../converter/AbstractJacksonHttpMessageConverter.java | 6 +++--- .../converter/AbstractSmartHttpMessageConverter.java | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/AbstractJacksonHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/AbstractJacksonHttpMessageConverter.java index 6b611b97d3d..898a786ba68 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/AbstractJacksonHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/AbstractJacksonHttpMessageConverter.java @@ -269,7 +269,7 @@ public abstract class AbstractJacksonHttpMessageConverter clazz, @Nullable MediaType mediaType) { + public boolean canWrite(ResolvableType type, Class valueClass, @Nullable MediaType mediaType) { if (!canWrite(mediaType)) { return false; } @@ -279,10 +279,10 @@ public abstract class AbstractJacksonHttpMessageConverter extends AbstractHttpM } @Override - public boolean canRead(ResolvableType type, @Nullable MediaType mediaType) { - Class clazz = type.resolve(); - return (clazz != null ? canRead(clazz, mediaType) : canRead(mediaType)); + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { + return canRead(ResolvableType.forClass(clazz), mediaType); } @Override - public boolean canWrite(ResolvableType type, Class clazz, @Nullable MediaType mediaType) { - return canWrite(clazz, mediaType); + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { + return canWrite(ResolvableType.forClass(clazz), clazz, mediaType); } /**