From bf3cadb90810fc93e356f3148bc3f98adf098797 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 13 Apr 2016 18:34:22 +0200 Subject: [PATCH] AbstractJackson2HttpMessageConverter's canRead/canWrite checks media type first before delegating to Jackson Issue: SPR-14163 (cherry picked from commit e366746) --- .../json/AbstractJackson2HttpMessageConverter.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java index 04a4b59ac8c..a98222d4e92 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java @@ -145,11 +145,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 (!jackson23Available || !logger.isWarnEnabled()) { - return (this.objectMapper.canDeserialize(javaType) && canRead(mediaType)); + return this.objectMapper.canDeserialize(javaType); } AtomicReference causeRef = new AtomicReference(); - if (this.objectMapper.canDeserialize(javaType, causeRef) && canRead(mediaType)) { + if (this.objectMapper.canDeserialize(javaType, causeRef)) { return true; } Throwable cause = causeRef.get(); @@ -167,11 +170,14 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener @Override public boolean canWrite(Class clazz, MediaType mediaType) { + if (!canWrite(mediaType)) { + return false; + } if (!jackson23Available || !logger.isWarnEnabled()) { - return (this.objectMapper.canSerialize(clazz) && canWrite(mediaType)); + return this.objectMapper.canSerialize(clazz); } AtomicReference causeRef = new AtomicReference(); - if (this.objectMapper.canSerialize(clazz, causeRef) && canWrite(mediaType)) { + if (this.objectMapper.canSerialize(clazz, causeRef)) { return true; } Throwable cause = causeRef.get();