Support String contentType headers in spring-messaging
After this change DefaultContentTypeResolver supports String-based "contentType" header values in addition to MimeType-based. Issue: SPR-11461
This commit is contained in:
parent
11c41993f1
commit
2b69c1f15b
|
@ -21,8 +21,9 @@ import org.springframework.util.MimeType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A default {@link ContentTypeResolver} that checks the
|
* A default {@link ContentTypeResolver} that checks the
|
||||||
* {@link MessageHeaders#CONTENT_TYPE} header or falls back to a default, if a default is
|
* {@link MessageHeaders#CONTENT_TYPE} header or falls back to a default value,
|
||||||
* configured.
|
* 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
|
* @author Rossen Stoyanchev
|
||||||
* @since 4.0
|
* @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.
|
* Set the default MIME type to use when there is no
|
||||||
* By default this property is set to {@code null}.
|
* {@link MessageHeaders#CONTENT_TYPE} header present.
|
||||||
|
* <p>
|
||||||
|
* This property does not have a default value.
|
||||||
*/
|
*/
|
||||||
public void setDefaultMimeType(MimeType defaultMimeType) {
|
public void setDefaultMimeType(MimeType defaultMimeType) {
|
||||||
this.defaultMimeType = 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() {
|
public MimeType getDefaultMimeType() {
|
||||||
return this.defaultMimeType;
|
return this.defaultMimeType;
|
||||||
|
@ -49,15 +53,25 @@ public class DefaultContentTypeResolver implements ContentTypeResolver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MimeType resolve(MessageHeaders headers) {
|
public MimeType resolve(MessageHeaders headers) {
|
||||||
MimeType mimeType = null;
|
if (headers == null || headers.get(MessageHeaders.CONTENT_TYPE) == null) {
|
||||||
if (headers != null) {
|
return this.defaultMimeType;
|
||||||
mimeType = headers.get(MessageHeaders.CONTENT_TYPE, MimeType.class);
|
}
|
||||||
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DefaultContentTypeResolver[" + "defaultMimeType=" + this.defaultMimeType + "]";
|
return "DefaultContentTypeResolver[" + "defaultMimeType=" + this.defaultMimeType + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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.junit.Test;
|
||||||
import org.springframework.messaging.MessageHeaders;
|
import org.springframework.messaging.MessageHeaders;
|
||||||
import org.springframework.messaging.converter.DefaultContentTypeResolver;
|
import org.springframework.messaging.converter.DefaultContentTypeResolver;
|
||||||
|
import org.springframework.util.InvalidMimeTypeException;
|
||||||
import org.springframework.util.MimeTypeUtils;
|
import org.springframework.util.MimeTypeUtils;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
@ -52,6 +53,31 @@ public class DefaultContentTypeResolverTests {
|
||||||
assertEquals(MimeTypeUtils.APPLICATION_JSON, this.resolver.resolve(headers));
|
assertEquals(MimeTypeUtils.APPLICATION_JSON, this.resolver.resolve(headers));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolveStringContentType() {
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON_VALUE);
|
||||||
|
MessageHeaders headers = new MessageHeaders(map);
|
||||||
|
|
||||||
|
assertEquals(MimeTypeUtils.APPLICATION_JSON, this.resolver.resolve(headers));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = InvalidMimeTypeException.class)
|
||||||
|
public void resolveInvalidStringContentType() {
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
map.put(MessageHeaders.CONTENT_TYPE, "invalidContentType");
|
||||||
|
MessageHeaders headers = new MessageHeaders(map);
|
||||||
|
this.resolver.resolve(headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void resolveUnknownHeaderType() {
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
map.put(MessageHeaders.CONTENT_TYPE, new Integer(1));
|
||||||
|
MessageHeaders headers = new MessageHeaders(map);
|
||||||
|
this.resolver.resolve(headers);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveNoContentTypeHeader() {
|
public void resolveNoContentTypeHeader() {
|
||||||
MessageHeaders headers = new MessageHeaders(Collections.<String, Object>emptyMap());
|
MessageHeaders headers = new MessageHeaders(Collections.<String, Object>emptyMap());
|
||||||
|
@ -60,7 +86,7 @@ public class DefaultContentTypeResolverTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveFromDefaultMimeType() {
|
public void resolveDefaultMimeType() {
|
||||||
this.resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
|
this.resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
|
||||||
MessageHeaders headers = new MessageHeaders(Collections.<String, Object>emptyMap());
|
MessageHeaders headers = new MessageHeaders(Collections.<String, Object>emptyMap());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue