Browse Source

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
pull/35933/head
Sébastien Deleuze 4 months ago
parent
commit
7a19cbb452
  1. 6
      spring-web/src/main/java/org/springframework/http/converter/AbstractJacksonHttpMessageConverter.java
  2. 9
      spring-web/src/main/java/org/springframework/http/converter/AbstractSmartHttpMessageConverter.java

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

@ -269,7 +269,7 @@ public abstract class AbstractJacksonHttpMessageConverter<T extends ObjectMapper @@ -269,7 +269,7 @@ public abstract class AbstractJacksonHttpMessageConverter<T extends ObjectMapper
@Override
@SuppressWarnings("removal")
public boolean canWrite(Class<?> 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<T extends ObjectMapper @@ -279,10 +279,10 @@ public abstract class AbstractJacksonHttpMessageConverter<T extends ObjectMapper
return false;
}
}
if (MappingJacksonValue.class.isAssignableFrom(clazz)) {
if (MappingJacksonValue.class.isAssignableFrom(valueClass)) {
throw new UnsupportedOperationException("MappingJacksonValue is not supported, use hints instead");
}
return this.mapperRegistrations == null || selectMapper(clazz, mediaType) != null;
return this.mapperRegistrations == null || selectMapper(valueClass, mediaType) != null;
}
/**

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

@ -69,14 +69,13 @@ public abstract class AbstractSmartHttpMessageConverter<T> extends AbstractHttpM @@ -69,14 +69,13 @@ public abstract class AbstractSmartHttpMessageConverter<T> 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);
}
/**

Loading…
Cancel
Save