diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java index 5bd836bb56..d63fb8c987 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java @@ -35,6 +35,7 @@ import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; import org.springframework.util.Assert; import org.springframework.util.MimeType; +import org.springframework.util.ObjectUtils; /** * Base class providing support methods for Jackson 2.9 encoding and decoding. @@ -62,19 +63,21 @@ public abstract class Jackson2CodecSupport { protected final ObjectMapper objectMapper; + private final List mimeTypes; + /** * Constructor with a Jackson {@link ObjectMapper} to use. */ - protected Jackson2CodecSupport(ObjectMapper objectMapper) { + protected Jackson2CodecSupport(ObjectMapper objectMapper, MimeType... mimeTypes) { Assert.notNull(objectMapper, "ObjectMapper must not be null"); this.objectMapper = objectMapper; + this.mimeTypes = !ObjectUtils.isEmpty(mimeTypes) ? Arrays.asList(mimeTypes) : JSON_MIME_TYPES; } protected boolean supportsMimeType(MimeType mimeType) { - return (mimeType == null || - JSON_MIME_TYPES.stream().anyMatch(m -> m.isCompatibleWith(mimeType))); + return (mimeType == null || this.mimeTypes.stream().anyMatch(m -> m.isCompatibleWith(mimeType))); } protected JavaType getJavaType(Type type, Class contextClass) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java index 3333558aaa..ce71d543f5 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java @@ -61,8 +61,8 @@ public class Jackson2JsonDecoder extends Jackson2CodecSupport implements HttpMes super(Jackson2ObjectMapperBuilder.json().build()); } - public Jackson2JsonDecoder(ObjectMapper mapper) { - super(mapper); + public Jackson2JsonDecoder(ObjectMapper mapper, MimeType... mimeTypes) { + super(mapper, mimeTypes); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java index 4514dd6e88..03281a7544 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java @@ -71,8 +71,8 @@ public class Jackson2JsonEncoder extends Jackson2CodecSupport implements HttpMes this(Jackson2ObjectMapperBuilder.json().build()); } - public Jackson2JsonEncoder(ObjectMapper mapper) { - super(mapper); + public Jackson2JsonEncoder(ObjectMapper mapper, MimeType... mimeTypes) { + super(mapper, mimeTypes); this.streamingMediaTypes.add(MediaType.APPLICATION_STREAM_JSON); this.ssePrettyPrinter = initSsePrettyPrinter(); }