Skip to content

Commit 7a19cbb

Browse files
committed
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
1 parent 2f1e1d4 commit 7a19cbb

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

spring-web/src/main/java/org/springframework/http/converter/AbstractJacksonHttpMessageConverter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ public boolean canRead(ResolvableType type, @Nullable MediaType mediaType) {
269269

270270
@Override
271271
@SuppressWarnings("removal")
272-
public boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType) {
272+
public boolean canWrite(ResolvableType type, Class<?> valueClass, @Nullable MediaType mediaType) {
273273
if (!canWrite(mediaType)) {
274274
return false;
275275
}
@@ -279,10 +279,10 @@ public boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType) {
279279
return false;
280280
}
281281
}
282-
if (MappingJacksonValue.class.isAssignableFrom(clazz)) {
282+
if (MappingJacksonValue.class.isAssignableFrom(valueClass)) {
283283
throw new UnsupportedOperationException("MappingJacksonValue is not supported, use hints instead");
284284
}
285-
return this.mapperRegistrations == null || selectMapper(clazz, mediaType) != null;
285+
return this.mapperRegistrations == null || selectMapper(valueClass, mediaType) != null;
286286
}
287287

288288
/**

spring-web/src/main/java/org/springframework/http/converter/AbstractSmartHttpMessageConverter.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,13 @@ protected boolean supports(Class<?> clazz) {
6969
}
7070

7171
@Override
72-
public boolean canRead(ResolvableType type, @Nullable MediaType mediaType) {
73-
Class<?> clazz = type.resolve();
74-
return (clazz != null ? canRead(clazz, mediaType) : canRead(mediaType));
72+
public boolean canRead(Class<?> clazz, @Nullable MediaType mediaType) {
73+
return canRead(ResolvableType.forClass(clazz), mediaType);
7574
}
7675

7776
@Override
78-
public boolean canWrite(ResolvableType type, Class<?> clazz, @Nullable MediaType mediaType) {
79-
return canWrite(clazz, mediaType);
77+
public boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType) {
78+
return canWrite(ResolvableType.forClass(clazz), clazz, mediaType);
8079
}
8180

8281
/**

0 commit comments

Comments
 (0)