AbstractJackson2HttpMessageConverter's canRead/canWrite checks media type first before delegating to Jackson
Issue: SPR-14163
This commit is contained in:
parent
ee31617ebe
commit
e3667467f6
|
|
@ -71,13 +71,20 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
|
|||
}
|
||||
|
||||
/**
|
||||
* Construct an {@code AbstractHttpMessageConverter} with multiple supported media type.
|
||||
* Construct an {@code AbstractHttpMessageConverter} with multiple supported media types.
|
||||
* @param supportedMediaTypes the supported media types
|
||||
*/
|
||||
protected AbstractHttpMessageConverter(MediaType... supportedMediaTypes) {
|
||||
setSupportedMediaTypes(Arrays.asList(supportedMediaTypes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct an {@code AbstractHttpMessageConverter} with a default charset and
|
||||
* multiple supported media types.
|
||||
* @param defaultCharset the default character set
|
||||
* @param supportedMediaTypes the supported media types
|
||||
* @since 4.3
|
||||
*/
|
||||
protected AbstractHttpMessageConverter(Charset defaultCharset, MediaType... supportedMediaTypes) {
|
||||
this.defaultCharset = defaultCharset;
|
||||
setSupportedMediaTypes(Arrays.asList(supportedMediaTypes));
|
||||
|
|
@ -98,16 +105,22 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the default character set if any.
|
||||
* Set the default character set, if any.
|
||||
* @since 4.3
|
||||
*/
|
||||
public void setDefaultCharset(Charset defaultCharset) {
|
||||
this.defaultCharset = defaultCharset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the default character set, if any.
|
||||
* @since 4.3
|
||||
*/
|
||||
public Charset getDefaultCharset() {
|
||||
return defaultCharset;
|
||||
return this.defaultCharset;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This implementation checks if the given class is {@linkplain #supports(Class) supported},
|
||||
* and if the {@linkplain #getSupportedMediaTypes() supported media types}
|
||||
|
|
@ -119,7 +132,7 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if any of the {@linkplain #setSupportedMediaTypes(List)
|
||||
* Returns {@code true} if any of the {@linkplain #setSupportedMediaTypes(List)
|
||||
* supported} media types {@link MediaType#includes(MediaType) include} the
|
||||
* given media type.
|
||||
* @param mediaType the media type to read, can be {@code null} if not specified.
|
||||
|
|
|
|||
|
|
@ -140,11 +140,14 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
|
|||
@Override
|
||||
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) {
|
||||
JavaType javaType = getJavaType(type, contextClass);
|
||||
if (!canRead(mediaType)) {
|
||||
return false;
|
||||
}
|
||||
if (!logger.isWarnEnabled()) {
|
||||
return (this.objectMapper.canDeserialize(javaType) && canRead(mediaType));
|
||||
return this.objectMapper.canDeserialize(javaType);
|
||||
}
|
||||
AtomicReference<Throwable> causeRef = new AtomicReference<Throwable>();
|
||||
if (this.objectMapper.canDeserialize(javaType, causeRef) && canRead(mediaType)) {
|
||||
if (this.objectMapper.canDeserialize(javaType, causeRef)) {
|
||||
return true;
|
||||
}
|
||||
Throwable cause = causeRef.get();
|
||||
|
|
@ -162,11 +165,14 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
|
|||
|
||||
@Override
|
||||
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
|
||||
if (!canWrite(mediaType)) {
|
||||
return false;
|
||||
}
|
||||
if (!logger.isWarnEnabled()) {
|
||||
return (this.objectMapper.canSerialize(clazz) && canWrite(mediaType));
|
||||
return this.objectMapper.canSerialize(clazz);
|
||||
}
|
||||
AtomicReference<Throwable> causeRef = new AtomicReference<Throwable>();
|
||||
if (this.objectMapper.canSerialize(clazz, causeRef) && canWrite(mediaType)) {
|
||||
if (this.objectMapper.canSerialize(clazz, causeRef)) {
|
||||
return true;
|
||||
}
|
||||
Throwable cause = causeRef.get();
|
||||
|
|
|
|||
Loading…
Reference in New Issue