summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2014-05-10 01:06:58 +0200
committerPeter Wu <peter@lekensteyn.nl>2014-05-10 01:06:58 +0200
commit00d14d387bcb5a788195326c6893f729a9ee863d (patch)
treea7f1532da0f7008999544ceb2260491239264253
parente4d8d30fca3bc621e0f5ec6eba6117b510621c6f (diff)
downloadDatafiller-00d14d387bcb5a788195326c6893f729a9ee863d.tar.gz
Detect wrong type for string
-rw-r--r--src/data/ValidatingJsonDeserializer.java6
-rw-r--r--test/data/ValidatingJsonDeserializerTest.java8
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);