From ba3e1196dc8affea6b884759075a73529e965f51 Mon Sep 17 00:00:00 2001 From: odlp Date: Sat, 3 Dec 2016 13:35:44 +0000 Subject: [PATCH] Add BooleanReader to allow boolean primitive to be read Resolves #280 --- .../spi/mapper/JsonSmartMappingProvider.java | 15 +++++++++++++++ .../test/java/com/jayway/jsonpath/MapperTest.java | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java index 5d402080..68e36e43 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java +++ b/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java @@ -44,6 +44,7 @@ public class JsonSmartMappingProvider implements MappingProvider { DEFAULT.registerReader(String.class, new StringReader()); DEFAULT.registerReader(Date.class, new DateReader()); DEFAULT.registerReader(BigInteger.class, new BigIntegerReader()); + DEFAULT.registerReader(boolean.class, new BooleanReader()); } @@ -245,4 +246,18 @@ public class JsonSmartMappingProvider implements MappingProvider { throw new MappingException("can not map a " + src.getClass() + " to " + Date.class.getName()); } } + private static class BooleanReader extends JsonReaderI { + public BooleanReader() { + super(null); + } + public Boolean convert(Object src) { + if(src == null){ + return null; + } + if (Boolean.class.isAssignableFrom(src.getClass())) { + return (Boolean) src; + } + throw new MappingException("can not map a " + src.getClass() + " to " + Boolean.class.getName()); + } + } } diff --git a/json-path/src/test/java/com/jayway/jsonpath/MapperTest.java b/json-path/src/test/java/com/jayway/jsonpath/MapperTest.java index 3407a88d..b930b765 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/MapperTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/MapperTest.java @@ -52,4 +52,10 @@ public class MapperTest extends BaseTest { public void a_String_can_be_converted_to_a_BigDecimal() { assertThat(parse("{\"val\": \"1.5\"}").read("val", BigDecimal.class)).isEqualTo(BigDecimal.valueOf(1.5d)); } + + @Test + public void a_Boolean_can_be_converted_to_a_primitive_boolean() { + assertThat(parse("{\"val\": true}").read("val", boolean.class)).isTrue(); + assertThat(parse("{\"val\": false}").read("val", boolean.class)).isFalse(); + } }