From 5d4ee09d53a727407771c500fc21cbd01c7f3083 Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Tue, 5 Sep 2017 13:12:29 +0200 Subject: [PATCH] Fix AbstractJackson2Encoder#canEncode This commit ensures that the Jackson encoder is selected only with supported mime types. Issue: SPR-15910 --- .../http/codec/json/AbstractJackson2Encoder.java | 5 ++--- .../http/codec/json/Jackson2JsonEncoderTests.java | 3 +++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java index 26a4ec4f935..d98856d58d3 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java @@ -79,9 +79,8 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple @Override public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); - return (Object.class == clazz) || - !String.class.isAssignableFrom(elementType.resolve(clazz)) && - getObjectMapper().canSerialize(clazz) && supportsMimeType(mimeType); + return supportsMimeType(mimeType) && (Object.class == clazz || + (!String.class.isAssignableFrom(elementType.resolve(clazz)) && getObjectMapper().canSerialize(clazz))); } @Override diff --git a/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonEncoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonEncoderTests.java index 15df132d8fe..5d5c7c03e93 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonEncoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonEncoderTests.java @@ -61,6 +61,9 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa // SPR-15464 assertTrue(this.encoder.canEncode(ResolvableType.NONE, null)); + + // SPR-15910 + assertFalse(this.encoder.canEncode(ResolvableType.forClass(Object.class), APPLICATION_OCTET_STREAM)); } @Test // SPR-15866