Refine Jackson canEncode() / canDecode() implementation

This commit refine Jackson canEncode() / canDecode()
implementation by using ObjectMapper canSerialize() /
canDeserialize() methods.

Issue: SPR-14748
This commit is contained in:
Sebastien Deleuze
2016-09-27 21:57:17 +02:00
parent b91c0b3a1a
commit dbc86ec043
6 changed files with 19 additions and 15 deletions

View File

@@ -23,6 +23,7 @@ import java.util.Map;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.type.TypeFactory;
import org.reactivestreams.Publisher;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -63,10 +64,9 @@ public class Jackson2JsonDecoder extends AbstractJackson2Codec implements Decode
@Override
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
if (mimeType == null) {
return true;
}
return JSON_MIME_TYPES.stream().anyMatch(m -> m.isCompatibleWith(mimeType));
JavaType javaType = this.mapper.getTypeFactory().constructType(elementType.getType());
return this.mapper.canDeserialize(javaType) &&
(mimeType == null || JSON_MIME_TYPES.stream().anyMatch(m -> m.isCompatibleWith(mimeType)));
}
@Override

View File

@@ -68,10 +68,8 @@ public class Jackson2JsonEncoder extends AbstractJackson2Codec implements Encode
@Override
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
if (mimeType == null) {
return true;
}
return JSON_MIME_TYPES.stream().anyMatch(m -> m.isCompatibleWith(mimeType));
return this.mapper.canSerialize(elementType.getRawClass()) &&
(mimeType == null || JSON_MIME_TYPES.stream().anyMatch(m -> m.isCompatibleWith(mimeType)));
}
@Override