diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java index 5b253cbc44..de7e361a7d 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/support/DefaultHttpHeaderMapper.java @@ -55,6 +55,7 @@ import org.springframework.lang.Nullable; import org.springframework.messaging.MessageHeaders; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; +import org.springframework.util.MimeType; import org.springframework.util.ObjectUtils; import org.springframework.util.PatternMatchUtils; import org.springframework.util.StringUtils; @@ -740,15 +741,16 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF if (!CollectionUtils.isEmpty(valuesToAccept)) { List acceptableMediaTypes = new ArrayList<>(); for (Object type : valuesToAccept) { - if (type instanceof MediaType) { - acceptableMediaTypes.add((MediaType) type); + if (type instanceof MimeType) { + acceptableMediaTypes.add(MediaType.asMediaType((MimeType) type)); } else if (type instanceof String) { acceptableMediaTypes.addAll(MediaType.parseMediaTypes((String) type)); } else { throwIllegalArgumentForUnexpectedValue( - "Expected MediaType or String value for 'Accept' header value, but received: ", type); + "Expected org.springframework.util.MimeType " + + "or String value for 'Accept' header value, but received: ", type); } } @@ -841,15 +843,16 @@ public class DefaultHttpHeaderMapper implements HeaderMapper, BeanF } private void setContentType(HttpHeaders target, Object value) { - if (value instanceof MediaType) { - target.setContentType((MediaType) value); + if (value instanceof MimeType) { + target.setContentType(MediaType.asMediaType((MimeType) value)); } else if (value instanceof String) { target.setContentType(MediaType.parseMediaType((String) value)); } else { throwIllegalArgumentForUnexpectedValue( - "Expected MediaType or String value for 'Content-Type' header value, but received: ", value); + "Expected org.springframework.util.MimeType " + + "or String value for 'Content-Type' header value, but received: ", value); } } diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java index 6640156d19..cc3dd6a21b 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/support/DefaultHttpHeaderMapperFromMessageOutboundTests.java @@ -40,6 +40,7 @@ import org.springframework.integration.mapping.HeaderMapper; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; +import org.springframework.util.MimeType; import org.springframework.util.StopWatch; /** @@ -343,6 +344,18 @@ public class DefaultHttpHeaderMapperFromMessageOutboundTests { assertThat(headers.getContentType().getSubtype()).isEqualTo("html"); } + @Test + public void validateContentTypeAsMimeType() { + HeaderMapper mapper = DefaultHttpHeaderMapper.outboundMapper(); + Map messageHeaders = new HashMap<>(); + messageHeaders.put(MessageHeaders.CONTENT_TYPE, new MimeType("text", "plain")); + HttpHeaders headers = new HttpHeaders(); + + mapper.fromHeaders(new MessageHeaders(messageHeaders), headers); + assertThat(headers.getContentType().getType()).isEqualTo("text"); + assertThat(headers.getContentType().getSubtype()).isEqualTo("plain"); + } + // Date test @Test