bean properties of type enum array/collection can be populated with comma-separated String (SPR-6547)
This commit is contained in:
parent
b497f6ccad
commit
5f9b444319
|
|
@ -202,6 +202,13 @@ class TypeConverterDelegate {
|
||||||
|
|
||||||
// Value not of required type?
|
// Value not of required type?
|
||||||
if (editor != null || (requiredType != null && !ClassUtils.isAssignableValue(requiredType, convertedValue))) {
|
if (editor != null || (requiredType != null && !ClassUtils.isAssignableValue(requiredType, convertedValue))) {
|
||||||
|
if (requiredType != null && Collection.class.isAssignableFrom(requiredType) &&
|
||||||
|
convertedValue instanceof String && typeDescriptor.getMethodParameter() != null) {
|
||||||
|
Class elementType = GenericCollectionTypeResolver.getCollectionParameterType(typeDescriptor.getMethodParameter());
|
||||||
|
if (elementType != null && Enum.class.isAssignableFrom(elementType)) {
|
||||||
|
convertedValue = StringUtils.commaDelimitedListToStringArray((String) convertedValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (editor == null) {
|
if (editor == null) {
|
||||||
editor = findDefaultEditor(requiredType, typeDescriptor);
|
editor = findDefaultEditor(requiredType, typeDescriptor);
|
||||||
}
|
}
|
||||||
|
|
@ -214,6 +221,9 @@ class TypeConverterDelegate {
|
||||||
if (convertedValue != null) {
|
if (convertedValue != null) {
|
||||||
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())) {
|
||||||
|
convertedValue = StringUtils.commaDelimitedListToStringArray((String) convertedValue);
|
||||||
|
}
|
||||||
return (T) convertToTypedArray(convertedValue, propertyName, requiredType.getComponentType());
|
return (T) convertToTypedArray(convertedValue, propertyName, requiredType.getComponentType());
|
||||||
}
|
}
|
||||||
else if (convertedValue instanceof Collection) {
|
else if (convertedValue instanceof Collection) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2008 the original author or authors.
|
* Copyright 2002-2009 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.
|
||||||
|
|
@ -17,9 +17,7 @@
|
||||||
package org.springframework.beans;
|
package org.springframework.beans;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import test.beans.CustomEnum;
|
import test.beans.CustomEnum;
|
||||||
import test.beans.GenericBean;
|
import test.beans.GenericBean;
|
||||||
|
|
||||||
|
|
@ -53,4 +51,62 @@ public final class BeanWrapperEnumTests {
|
||||||
assertEquals(null, gb.getCustomEnum());
|
assertEquals(null, gb.getCustomEnum());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomEnumArrayWithSingleValue() {
|
||||||
|
GenericBean<?> gb = new GenericBean<Object>();
|
||||||
|
BeanWrapper bw = new BeanWrapperImpl(gb);
|
||||||
|
bw.setPropertyValue("customEnumArray", "VALUE_1");
|
||||||
|
assertEquals(1, gb.getCustomEnumArray().length);
|
||||||
|
assertEquals(CustomEnum.VALUE_1, gb.getCustomEnumArray()[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomEnumArrayWithMultipleValues() {
|
||||||
|
GenericBean<?> gb = new GenericBean<Object>();
|
||||||
|
BeanWrapper bw = new BeanWrapperImpl(gb);
|
||||||
|
bw.setPropertyValue("customEnumArray", new String[] {"VALUE_1", "VALUE_2"});
|
||||||
|
assertEquals(2, gb.getCustomEnumArray().length);
|
||||||
|
assertEquals(CustomEnum.VALUE_1, gb.getCustomEnumArray()[0]);
|
||||||
|
assertEquals(CustomEnum.VALUE_2, gb.getCustomEnumArray()[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomEnumArrayWithMultipleValuesAsCsv() {
|
||||||
|
GenericBean<?> gb = new GenericBean<Object>();
|
||||||
|
BeanWrapper bw = new BeanWrapperImpl(gb);
|
||||||
|
bw.setPropertyValue("customEnumArray", "VALUE_1,VALUE_2");
|
||||||
|
assertEquals(2, gb.getCustomEnumArray().length);
|
||||||
|
assertEquals(CustomEnum.VALUE_1, gb.getCustomEnumArray()[0]);
|
||||||
|
assertEquals(CustomEnum.VALUE_2, gb.getCustomEnumArray()[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomEnumSetWithSingleValue() {
|
||||||
|
GenericBean<?> gb = new GenericBean<Object>();
|
||||||
|
BeanWrapper bw = new BeanWrapperImpl(gb);
|
||||||
|
bw.setPropertyValue("customEnumSet", "VALUE_1");
|
||||||
|
assertEquals(1, gb.getCustomEnumSet().size());
|
||||||
|
assertTrue(gb.getCustomEnumSet().contains(CustomEnum.VALUE_1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomEnumSetWithMultipleValues() {
|
||||||
|
GenericBean<?> gb = new GenericBean<Object>();
|
||||||
|
BeanWrapper bw = new BeanWrapperImpl(gb);
|
||||||
|
bw.setPropertyValue("customEnumSet", new String[] {"VALUE_1", "VALUE_2"});
|
||||||
|
assertEquals(2, gb.getCustomEnumSet().size());
|
||||||
|
assertTrue(gb.getCustomEnumSet().contains(CustomEnum.VALUE_1));
|
||||||
|
assertTrue(gb.getCustomEnumSet().contains(CustomEnum.VALUE_2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomEnumSetWithMultipleValuesAsCsv() {
|
||||||
|
GenericBean<?> gb = new GenericBean<Object>();
|
||||||
|
BeanWrapper bw = new BeanWrapperImpl(gb);
|
||||||
|
bw.setPropertyValue("customEnumSet", "VALUE_1,VALUE_2");
|
||||||
|
assertEquals(2, gb.getCustomEnumSet().size());
|
||||||
|
assertTrue(gb.getCustomEnumSet().contains(CustomEnum.VALUE_1));
|
||||||
|
assertTrue(gb.getCustomEnumSet().contains(CustomEnum.VALUE_2));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,11 +60,14 @@ public class GenericBean<T> {
|
||||||
|
|
||||||
private CustomEnum customEnum;
|
private CustomEnum customEnum;
|
||||||
|
|
||||||
|
private CustomEnum[] customEnumArray;
|
||||||
|
|
||||||
|
private Set<CustomEnum> customEnumSet;
|
||||||
|
|
||||||
private T genericProperty;
|
private T genericProperty;
|
||||||
|
|
||||||
private List<T> genericListProperty;
|
private List<T> genericListProperty;
|
||||||
|
|
||||||
|
|
||||||
public GenericBean() {
|
public GenericBean() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,6 +228,22 @@ public class GenericBean<T> {
|
||||||
this.customEnum = customEnum;
|
this.customEnum = customEnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CustomEnum[] getCustomEnumArray() {
|
||||||
|
return customEnumArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomEnumArray(CustomEnum[] customEnum) {
|
||||||
|
this.customEnumArray = customEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<CustomEnum> getCustomEnumSet() {
|
||||||
|
return customEnumSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomEnumSet(Set<CustomEnum> customEnumSet) {
|
||||||
|
this.customEnumSet = customEnumSet;
|
||||||
|
}
|
||||||
|
|
||||||
public static GenericBean createInstance(Set<Integer> integerSet) {
|
public static GenericBean createInstance(Set<Integer> integerSet) {
|
||||||
return new GenericBean(integerSet);
|
return new GenericBean(integerSet);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue