diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/DefaultContentTypeResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/DefaultContentTypeResolver.java index 1d9e273ccb..73c013ac22 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/DefaultContentTypeResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/DefaultContentTypeResolver.java @@ -21,8 +21,9 @@ import org.springframework.util.MimeType; /** * A default {@link ContentTypeResolver} that checks the - * {@link MessageHeaders#CONTENT_TYPE} header or falls back to a default, if a default is - * configured. + * {@link MessageHeaders#CONTENT_TYPE} header or falls back to a default value, + * The header value is expected to be a {@link org.springframework.util.MimeType} + * or a String that can be parsed into a {@code MimeType}. * * @author Rossen Stoyanchev * @since 4.0 @@ -33,15 +34,18 @@ public class DefaultContentTypeResolver implements ContentTypeResolver { /** - * Set the default MIME type to use, if the message headers don't have one. - * By default this property is set to {@code null}. + * Set the default MIME type to use when there is no + * {@link MessageHeaders#CONTENT_TYPE} header present. + *
+ * This property does not have a default value.
*/
public void setDefaultMimeType(MimeType defaultMimeType) {
this.defaultMimeType = defaultMimeType;
}
/**
- * Return the default MIME type to use.
+ * Return the default MIME type to use if no
+ * {@link MessageHeaders#CONTENT_TYPE} header is present.
*/
public MimeType getDefaultMimeType() {
return this.defaultMimeType;
@@ -49,15 +53,25 @@ public class DefaultContentTypeResolver implements ContentTypeResolver {
@Override
public MimeType resolve(MessageHeaders headers) {
- MimeType mimeType = null;
- if (headers != null) {
- mimeType = headers.get(MessageHeaders.CONTENT_TYPE, MimeType.class);
+ if (headers == null || headers.get(MessageHeaders.CONTENT_TYPE) == null) {
+ return this.defaultMimeType;
+ }
+ Object value = headers.get(MessageHeaders.CONTENT_TYPE);
+ if (value instanceof MimeType) {
+ return (MimeType) value;
+ }
+ else if (value instanceof String) {
+ return MimeType.valueOf((String) value);
+ }
+ else {
+ throw new IllegalArgumentException(
+ "Unknown type for contentType header value: " + value.getClass());
}
- return (mimeType != null) ? mimeType : this.defaultMimeType;
}
@Override
public String toString() {
return "DefaultContentTypeResolver[" + "defaultMimeType=" + this.defaultMimeType + "]";
}
+
}
diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/DefaultContentTypeResolverTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/DefaultContentTypeResolverTests.java
index e7a8b8b601..1d3d18db18 100644
--- a/spring-messaging/src/test/java/org/springframework/messaging/converter/DefaultContentTypeResolverTests.java
+++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/DefaultContentTypeResolverTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2013 the original author or authors.
+ * Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import org.junit.Before;
import org.junit.Test;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.converter.DefaultContentTypeResolver;
+import org.springframework.util.InvalidMimeTypeException;
import org.springframework.util.MimeTypeUtils;
import static org.junit.Assert.*;
@@ -52,6 +53,31 @@ public class DefaultContentTypeResolverTests {
assertEquals(MimeTypeUtils.APPLICATION_JSON, this.resolver.resolve(headers));
}
+ @Test
+ public void resolveStringContentType() {
+ Map