SPR-6771 - HttpMessageConverter should accept Class<? extends T> on can read

This commit is contained in:
Arjen Poutsma 2010-01-28 09:23:34 +00:00
parent 1cda8cb6fa
commit f2fdf9fa6b
11 changed files with 18 additions and 20 deletions

View File

@ -91,7 +91,7 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
* #getSupportedMediaTypes() supported media types} {@linkplain MediaType#includes(MediaType) include} the given media * #getSupportedMediaTypes() supported media types} {@linkplain MediaType#includes(MediaType) include} the given media
* type. * type.
*/ */
public boolean canRead(Class<? extends T> clazz, MediaType mediaType) { public boolean canRead(Class<?> clazz, MediaType mediaType) {
return supports(clazz) && canRead(mediaType); return supports(clazz) && canRead(mediaType);
} }
@ -121,7 +121,7 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
* #getSupportedMediaTypes() supported media types} {@linkplain MediaType#includes(MediaType) include} the given media * #getSupportedMediaTypes() supported media types} {@linkplain MediaType#includes(MediaType) include} the given media
* type. * type.
*/ */
public boolean canWrite(Class<? extends T> clazz, MediaType mediaType) { public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return supports(clazz) && canWrite(mediaType); return supports(clazz) && canWrite(mediaType);
} }
@ -150,7 +150,7 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
* @param clazz the class to test for support * @param clazz the class to test for support
* @return <code>true</code> if supported; <code>false</code> otherwise * @return <code>true</code> if supported; <code>false</code> otherwise
*/ */
protected abstract boolean supports(Class<? extends T> clazz); protected abstract boolean supports(Class<?> clazz);
/** /**
* {@inheritDoc} * {@inheritDoc}

View File

@ -113,7 +113,7 @@ public class BufferedImageHttpMessageConverter implements HttpMessageConverter<B
this.cacheDir = cacheDir; this.cacheDir = cacheDir;
} }
public boolean canRead(Class<? extends BufferedImage> clazz, MediaType mediaType) { public boolean canRead(Class<?> clazz, MediaType mediaType) {
if (BufferedImage.class.equals(clazz)) { if (BufferedImage.class.equals(clazz)) {
return isReadable(mediaType); return isReadable(mediaType);
} }
@ -130,7 +130,7 @@ public class BufferedImageHttpMessageConverter implements HttpMessageConverter<B
return imageReaders.hasNext(); return imageReaders.hasNext();
} }
public boolean canWrite(Class<? extends BufferedImage> clazz, MediaType mediaType) { public boolean canWrite(Class<?> clazz, MediaType mediaType) {
if (BufferedImage.class.equals(clazz)) { if (BufferedImage.class.equals(clazz)) {
return isWritable(mediaType); return isWritable(mediaType);
} }

View File

@ -42,7 +42,7 @@ public class ByteArrayHttpMessageConverter extends AbstractHttpMessageConverter<
} }
@Override @Override
public boolean supports(Class<? extends byte[]> clazz) { public boolean supports(Class<?> clazz) {
return byte[].class.equals(clazz); return byte[].class.equals(clazz);
} }

View File

@ -56,7 +56,7 @@ public class FormHttpMessageConverter extends AbstractHttpMessageConverter<Multi
} }
@Override @Override
public boolean supports(Class<? extends MultiValueMap<String, String>> clazz) { public boolean supports(Class<?> clazz) {
return MultiValueMap.class.isAssignableFrom(clazz); return MultiValueMap.class.isAssignableFrom(clazz);
} }

View File

@ -37,7 +37,7 @@ public interface HttpMessageConverter<T> {
* @param mediaType the media type to read, can be {@code null} if not specified * @param mediaType the media type to read, can be {@code null} if not specified
* @return <code>true</code> if readable; <code>false</code> otherwise * @return <code>true</code> if readable; <code>false</code> otherwise
*/ */
boolean canRead(Class<? extends T> clazz, MediaType mediaType); boolean canRead(Class<?> clazz, MediaType mediaType);
/** /**
* Indicates whether the given class can be written by this converter. * Indicates whether the given class can be written by this converter.
@ -45,7 +45,7 @@ public interface HttpMessageConverter<T> {
* @param mediaType the media type to write, can be {@code null} if not specified * @param mediaType the media type to write, can be {@code null} if not specified
* @return <code>true</code> if writable; <code>false</code> otherwise * @return <code>true</code> if writable; <code>false</code> otherwise
*/ */
boolean canWrite(Class<? extends T> clazz, MediaType mediaType); boolean canWrite(Class<?> clazz, MediaType mediaType);
/** /**
* Return the list of {@link MediaType} objects supported by this converter. * Return the list of {@link MediaType} objects supported by this converter.

View File

@ -51,7 +51,7 @@ public class StringHttpMessageConverter extends AbstractHttpMessageConverter<Str
} }
@Override @Override
public boolean supports(Class<? extends String> clazz) { public boolean supports(Class<?> clazz) {
return String.class.equals(clazz); return String.class.equals(clazz);
} }

View File

@ -97,6 +97,7 @@ public class MarshallingHttpMessageConverter extends AbstractXmlHttpMessageConve
this.unmarshaller = unmarshaller; this.unmarshaller = unmarshaller;
} }
@Override
public boolean supports(Class<?> clazz) { public boolean supports(Class<?> clazz) {
return unmarshaller.supports(clazz); return unmarshaller.supports(clazz);
} }

View File

@ -45,7 +45,7 @@ import org.springframework.http.converter.HttpMessageNotWritableException;
public class SourceHttpMessageConverter<T extends Source> extends AbstractXmlHttpMessageConverter<T> { public class SourceHttpMessageConverter<T extends Source> extends AbstractXmlHttpMessageConverter<T> {
@Override @Override
public boolean supports(Class<? extends T> clazz) { public boolean supports(Class<?> clazz) {
return DOMSource.class.equals(clazz) || SAXSource.class.equals(clazz) || StreamSource.class.equals(clazz) || return DOMSource.class.equals(clazz) || SAXSource.class.equals(clazz) || StreamSource.class.equals(clazz) ||
Source.class.equals(clazz); Source.class.equals(clazz);
} }

View File

@ -43,14 +43,14 @@ public class FormHttpMessageConverterTests {
@Test @Test
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void canRead() { public void canRead() {
assertTrue(converter.canRead((Class<? extends MultiValueMap<String, String>>) MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"))); assertTrue(converter.canRead(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded")));
} }
@Test @Test
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void canWrite() { public void canWrite() {
assertTrue(converter.canWrite((Class<? extends MultiValueMap<String, String>>) MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"))); assertTrue(converter.canWrite(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded")));
assertTrue(converter.canWrite((Class<? extends MultiValueMap<String, String>>) MultiValueMap.class, MediaType.ALL)); assertTrue(converter.canWrite(MultiValueMap.class, MediaType.ALL));
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")

View File

@ -39,7 +39,7 @@ public class HttpMessageConverterTests {
public void canRead() { public void canRead() {
AbstractHttpMessageConverter<MyType> converter = new MyHttpMessageConverter<MyType>(MEDIA_TYPE) { AbstractHttpMessageConverter<MyType> converter = new MyHttpMessageConverter<MyType>(MEDIA_TYPE) {
@Override @Override
protected boolean supports(Class<? extends MyType> clazz) { protected boolean supports(Class<?> clazz) {
return MyType.class.equals(clazz); return MyType.class.equals(clazz);
} }
@ -54,7 +54,7 @@ public class HttpMessageConverterTests {
public void canWrite() { public void canWrite() {
AbstractHttpMessageConverter<MyType> converter = new MyHttpMessageConverter<MyType>(MEDIA_TYPE) { AbstractHttpMessageConverter<MyType> converter = new MyHttpMessageConverter<MyType>(MEDIA_TYPE) {
@Override @Override
protected boolean supports(Class<? extends MyType> clazz) { protected boolean supports(Class<?> clazz) {
return MyType.class.equals(clazz); return MyType.class.equals(clazz);
} }
@ -73,7 +73,7 @@ public class HttpMessageConverterTests {
} }
@Override @Override
protected boolean supports(Class<? extends T> clazz) { protected boolean supports(Class<?> clazz) {
fail("Not expected"); fail("Not expected");
return false; return false;
} }

View File

@ -43,15 +43,12 @@ public class Jaxb2RootElementHttpMessageConverterTest {
private RootElement rootElement; private RootElement rootElement;
private Type type;
private RootElement rootElementCglib; private RootElement rootElementCglib;
@Before @Before
public void setUp() { public void setUp() {
converter = new Jaxb2RootElementHttpMessageConverter(); converter = new Jaxb2RootElementHttpMessageConverter();
rootElement = new RootElement(); rootElement = new RootElement();
type = new Type();
DefaultAopProxyFactory proxyFactory = new DefaultAopProxyFactory(); DefaultAopProxyFactory proxyFactory = new DefaultAopProxyFactory();
AdvisedSupport advisedSupport = new AdvisedSupport(); AdvisedSupport advisedSupport = new AdvisedSupport();
advisedSupport.setTarget(rootElement); advisedSupport.setTarget(rootElement);