Skip convert to Object from TypeConverterDelegate
Update TypeConverterDelegate to bypass conversion when the target type is Object.class. Prior to this commit converting a single element array to an Object would result in the element being returned, rather than the array itself. Issue: SPR-10996
This commit is contained in:
parent
b25e91a550
commit
c9aace4da2
|
|
@ -187,6 +187,9 @@ class TypeConverterDelegate {
|
||||||
// Try to apply some standard type conversion rules if appropriate.
|
// Try to apply some standard type conversion rules if appropriate.
|
||||||
|
|
||||||
if (convertedValue != null) {
|
if (convertedValue != null) {
|
||||||
|
if (Object.class.equals(requiredType)) {
|
||||||
|
return (T) convertedValue;
|
||||||
|
}
|
||||||
if (requiredType.isArray()) {
|
if (requiredType.isArray()) {
|
||||||
// Array required -> apply appropriate conversion of elements.
|
// Array required -> apply appropriate conversion of elements.
|
||||||
if (convertedValue instanceof String && Enum.class.isAssignableFrom(requiredType.getComponentType())) {
|
if (convertedValue instanceof String && Enum.class.isAssignableFrom(requiredType.getComponentType())) {
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,10 @@ import org.springframework.core.convert.support.GenericConversionService;
|
||||||
import org.springframework.util.StopWatch;
|
import org.springframework.util.StopWatch;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.*;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rod Johnson
|
* @author Rod Johnson
|
||||||
|
|
@ -1559,6 +1563,20 @@ public final class BeanWrapperTests {
|
||||||
assertEquals("val1", Spr10115Bean.prop1);
|
assertEquals("val1", Spr10115Bean.prop1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArrayToObject() throws Exception {
|
||||||
|
ArrayToObject foo = new ArrayToObject();
|
||||||
|
BeanWrapperImpl bwi = new BeanWrapperImpl();
|
||||||
|
bwi.setWrappedInstance(foo);
|
||||||
|
|
||||||
|
Object[] array = new Object[] {"1","2"};
|
||||||
|
bwi.setPropertyValue("object", array );
|
||||||
|
assertThat(foo.getObject(), equalTo((Object) array));
|
||||||
|
|
||||||
|
array = new Object[] {"1"};
|
||||||
|
bwi.setPropertyValue("object", array );
|
||||||
|
assertThat(foo.getObject(), equalTo((Object) array));
|
||||||
|
}
|
||||||
|
|
||||||
static class Spr10115Bean {
|
static class Spr10115Bean {
|
||||||
private static String prop1;
|
private static String prop1;
|
||||||
|
|
@ -1944,4 +1962,19 @@ public final class BeanWrapperTests {
|
||||||
TEST_VALUE
|
TEST_VALUE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static class ArrayToObject {
|
||||||
|
|
||||||
|
private Object object;
|
||||||
|
|
||||||
|
|
||||||
|
public void setObject(Object object) {
|
||||||
|
this.object = object;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getObject() {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue