Skip to content

Commit 7af62c4

Browse files
authored
feat: allow case-insensitive boolean conversion (#293)
1 parent fb5e2ae commit 7af62c4

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

src/main/java/net/kaczmarzyk/spring/data/jpa/utils/Converter.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public <T> T convert(String value, Class<T> expectedClass, boolean ignoreCase) {
141141
if (expectedClass.isEnum()) {
142142
return (T) convertToEnum(value, (Class<? extends Enum<?>>) expectedClass, ignoreCase);
143143
} else if (isAssignableFromAnyOf(expectedClass, Boolean.class, boolean.class)) {
144-
return (T) convertToBoolean(value);
144+
return (T) convertToBoolean(value, ignoreCase);
145145
} else if (isAssignableFromAnyOf(expectedClass, Integer.class, int.class, Long.class, long.class)) {
146146
return (T) convertToLong(value);
147147
} else if (isAssignableFromAnyOf(expectedClass, float.class, Float.class)) {
@@ -240,10 +240,11 @@ private BigDecimal convertToBigDecimal(String value) {
240240
}
241241
}
242242

243-
private Boolean convertToBoolean(String value) {
244-
if ("true".equals(value)) {
243+
private Boolean convertToBoolean(String value, boolean ignoreCase) {
244+
var valueToParse = ignoreCase ? value.toLowerCase() : value;
245+
if ("true".equals(valueToParse)) {
245246
return true;
246-
} else if ("false".equals(value)) {
247+
} else if ("false".equals(valueToParse)) {
247248
return false;
248249
} else {
249250
throw new ValueRejectedException(value, "unparseable boolean");

src/test/java/net/kaczmarzyk/spring/data/jpa/utils/converter/ConverterTest.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,28 @@ public void convertsToBoolean() {
8282
assertThat(converter.convert("true", Boolean.class)).isEqualTo(true);
8383
assertThat(converter.convert("false", Boolean.class)).isEqualTo(false);
8484
}
85-
85+
86+
@Test
87+
public void convertsToBooleanIgnoringCase() {
88+
assertThat(converter.convert("TRUE", Boolean.class, true)).isEqualTo(true);
89+
assertThat(converter.convert("FALSE", Boolean.class, true)).isEqualTo(false);
90+
}
91+
8692
@Test
8793
public void convertsToBooleanByPrimitiveType() {
8894
assertThat(converter.convert("true", boolean.class)).isEqualTo(true);
8995
assertThat(converter.convert("false", boolean.class)).isEqualTo(false);
9096
}
91-
97+
98+
@Test
99+
public void convertsToBooleanByPrimitiveTypeIgnoringCase() {
100+
assertThat(converter.convert("TRUE", boolean.class, true)).isEqualTo(true);
101+
assertThat(converter.convert("FALSE", boolean.class, true)).isEqualTo(false);
102+
}
103+
92104
@Test
93105
public void throwsExceptionOnInvalidBooleanValue() {
94-
assertThatThrownBy(() -> converter.convert("TRUE", Boolean.class))
106+
assertThatThrownBy(() -> converter.convert("invalid", Boolean.class))
95107
.isInstanceOf(IllegalArgumentException.class);
96108
}
97109

0 commit comments

Comments
 (0)