Jackson encoder skips String.class
Jackson2Encoder explicitly disables String from the supported types
consistent with the same change on the decoder side:
0662dbf044
Issue: SPR-15443
This commit is contained in:
@@ -69,7 +69,7 @@ public class Jackson2JsonDecoder extends Jackson2CodecSupport implements HttpMes
|
||||
@Override
|
||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||
JavaType javaType = this.objectMapper.getTypeFactory().constructType(elementType.getType());
|
||||
// Skip String (CharSequenceDecoder + "*/*" comes after)
|
||||
// Skip String: CharSequenceDecoder + "*/*" comes after
|
||||
return (!CharSequence.class.isAssignableFrom(elementType.resolve(Object.class)) &&
|
||||
this.objectMapper.canDeserialize(javaType) && supportsMimeType(mimeType));
|
||||
}
|
||||
|
||||
@@ -105,7 +105,9 @@ public class Jackson2JsonEncoder extends Jackson2CodecSupport implements HttpMes
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||
Class<?> clazz = elementType.getRawClass();
|
||||
return (this.objectMapper.canSerialize(clazz) && supportsMimeType(mimeType));
|
||||
// Skip String: StringDecoder + "*/*" comes after
|
||||
return (!String.class.isAssignableFrom(elementType.resolve(Object.class)) &&
|
||||
this.objectMapper.canSerialize(clazz) && supportsMimeType(mimeType));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,7 +52,13 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa
|
||||
ResolvableType pojoType = ResolvableType.forClass(Pojo.class);
|
||||
assertTrue(this.encoder.canEncode(pojoType, APPLICATION_JSON));
|
||||
assertTrue(this.encoder.canEncode(pojoType, null));
|
||||
assertFalse(this.encoder.canEncode(pojoType, APPLICATION_XML));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canNotEncode() {
|
||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(String.class), null));
|
||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Pojo.class), APPLICATION_XML));
|
||||
|
||||
ResolvableType sseType = ResolvableType.forClass(ServerSentEvent.class);
|
||||
assertFalse(this.encoder.canEncode(sseType, APPLICATION_JSON));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user