diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToBooleanConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToBooleanConverter.java index 68bf584d4a..2c32a5f67b 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToBooleanConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToBooleanConverter.java @@ -27,14 +27,16 @@ import org.springframework.core.convert.converter.Converter; class StringToBooleanConverter implements Converter { public Boolean convert(String source) { - if (source.equals("true")) { + if (source.equals("")) { + return null; + } else if (source.equals("true")) { return Boolean.TRUE; } else if (source.equals("false")) { return Boolean.FALSE; } else { - throw new IllegalArgumentException("Invalid boolean string '" + source + "'; expected 'true' or 'false'"); + throw new IllegalArgumentException("Invalid boolean string '" + source + "'; expected \"\", 'true', or 'false'"); } } diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToNumberConverterFactory.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToNumberConverterFactory.java index 46305ac87d..a09aaf64db 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToNumberConverterFactory.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToNumberConverterFactory.java @@ -53,6 +53,9 @@ class StringToNumberConverterFactory implements ConverterFactory } public T convert(String source) { + if ("".equals(source)) { + return null; + } return NumberUtils.parseNumber(source, targetType); } } diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java index 53fc7b0349..e1c2f958c6 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java @@ -40,14 +40,41 @@ public class DefaultConversionServiceTests { StringToCharacterConverter c = new StringToCharacterConverter(); assertEquals(Character.valueOf('1'), c.convert("1")); } + + @Test + public void testStringToCharacterEmptyString() { + StringToCharacterConverter c = new StringToCharacterConverter(); + assertEquals(null, c.convert("")); + } + + @Test(expected=IllegalArgumentException.class) + public void testStringToCharacterInvalidString() { + new StringToCharacterConverter().convert("invalid"); + } @Test - public void testStringToBoolean() { + public void testStringToBooleanTrue() { StringToBooleanConverter c = new StringToBooleanConverter(); assertEquals(Boolean.valueOf(true), c.convert("true")); + } + + @Test + public void testStringToBooleanFalse() { + StringToBooleanConverter c = new StringToBooleanConverter(); assertEquals(Boolean.valueOf(false), c.convert("false")); } + @Test + public void testStringToBooleanEmptyString() { + StringToBooleanConverter c = new StringToBooleanConverter(); + assertEquals(null, c.convert("")); + } + + @Test(expected=IllegalArgumentException.class) + public void testStringToBooleanInvalidString() { + new StringToBooleanConverter().convert("invalid"); + } + @Test public void testStringToByte() throws Exception { assertEquals(Byte.valueOf("1"), c.getConverter(Byte.class).convert("1")); @@ -88,12 +115,28 @@ public class DefaultConversionServiceTests { assertEquals(new BigDecimal("1.0"), c.getConverter(BigDecimal.class).convert("1.0")); } + @Test + public void testStringToNumber() { + assertEquals(new BigDecimal("1.0"), c.getConverter(Number.class).convert("1.0")); + } + + @Test + public void testStringToNumberEmptyString() { + assertEquals(null, c.getConverter(Number.class).convert("")); + } + @Test public void testStringToEnum() throws Exception { Converter c = new StringToEnumConverterFactory().getConverter(Foo.class); assertEquals(Foo.BAR, c.convert("BAR")); } + @Test + public void testStringToEnumEmptyString() throws Exception { + Converter c = new StringToEnumConverterFactory().getConverter(Foo.class); + assertEquals(null, c.convert("")); + } + public static enum Foo { BAR, BAZ; }