From 00d14d387bcb5a788195326c6893f729a9ee863d Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Sat, 10 May 2014 01:06:58 +0200 Subject: Detect wrong type for string --- src/data/ValidatingJsonDeserializer.java | 6 ++++++ test/data/ValidatingJsonDeserializerTest.java | 8 ++++++++ 2 files changed, 14 insertions(+) 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 implements JsonDeserializer { } 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.*; @@ -535,6 +536,13 @@ public class ValidatingJsonDeserializerTest { checkTweetPass(tweet); } + @Test + public void testWrongType() { + JsonObject tweet = buildMinimalTweet(buildMinimalUser()); + addProperty(tweet, new JsonPrimitive(1), "text"); + checkTweetFail(tweet, "Expected string: text"); + } + @Test public void testNotATweetObject() { try { -- cgit v1.2.1