diff options
-rw-r--r-- | src/data/ValidatingJsonDeserializer.java | 6 | ||||
-rw-r--r-- | test/data/ValidatingJsonDeserializerTest.java | 8 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/data/ValidatingJsonDeserializer.java b/src/data/ValidatingJsonDeserializer.java index f44b681..1474de3 100644 --- a/src/data/ValidatingJsonDeserializer.java +++ b/src/data/ValidatingJsonDeserializer.java @@ -8,6 +8,7 @@ import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -41,6 +42,11 @@ public class ValidatingJsonDeserializer<T> implements JsonDeserializer<T> { } throw new JsonParseException("Missing field: " + path + f.getName()); } + if (f.getType().equals(String.class)) { + if (!val.isJsonPrimitive() || !val.getAsJsonPrimitive().isString()) { + throw new JsonParseException("Expected string: " + path + f.getName()); + } + } tryValidateProperty(path, val, f); // TODO: validate type? } diff --git a/test/data/ValidatingJsonDeserializerTest.java b/test/data/ValidatingJsonDeserializerTest.java index a1f9884..a8b1955 100644 --- a/test/data/ValidatingJsonDeserializerTest.java +++ b/test/data/ValidatingJsonDeserializerTest.java @@ -7,6 +7,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import static org.junit.Assert.*; @@ -536,6 +537,13 @@ public class ValidatingJsonDeserializerTest { } @Test + public void testWrongType() { + JsonObject tweet = buildMinimalTweet(buildMinimalUser()); + addProperty(tweet, new JsonPrimitive(1), "text"); + checkTweetFail(tweet, "Expected string: text"); + } + + @Test public void testNotATweetObject() { try { DebuggingJsonDeserializer.tryValidate("{}", Tweet.class); |