Fix AbstractJackson2Encoder#canEncode

This commit ensures that the Jackson encoder is selected only
with supported mime types.

Issue: SPR-15910
This commit is contained in:
Sebastien Deleuze 2017-09-05 13:12:29 +02:00
parent 320bfdf413
commit 5d4ee09d53
2 changed files with 5 additions and 3 deletions

View File

@ -79,9 +79,8 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple
@Override @Override
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
Class<?> clazz = elementType.resolve(Object.class); Class<?> clazz = elementType.resolve(Object.class);
return (Object.class == clazz) || return supportsMimeType(mimeType) && (Object.class == clazz ||
!String.class.isAssignableFrom(elementType.resolve(clazz)) && (!String.class.isAssignableFrom(elementType.resolve(clazz)) && getObjectMapper().canSerialize(clazz)));
getObjectMapper().canSerialize(clazz) && supportsMimeType(mimeType);
} }
@Override @Override

View File

@ -61,6 +61,9 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa
// SPR-15464 // SPR-15464
assertTrue(this.encoder.canEncode(ResolvableType.NONE, null)); assertTrue(this.encoder.canEncode(ResolvableType.NONE, null));
// SPR-15910
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Object.class), APPLICATION_OCTET_STREAM));
} }
@Test // SPR-15866 @Test // SPR-15866