Skip to content

Commit ade4f14

Browse files
author
eugenp
committed
further gson testing work
1 parent 01625ed commit ade4f14

File tree

10 files changed

+217
-53
lines changed

10 files changed

+217
-53
lines changed

gson/README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
=========
22

3-
## Jackson Cookbooks and Examples
3+
## GSON Cookbooks and Examples
44

55
### Relevant Articles:
6-
- [Jackson Ignore Properties on Marshalling](http://www.baeldung.com/jackson-ignore-properties-on-serialization)
7-
- [Jackson – Unmarshall to Collection/Array](http://www.baeldung.com/jackson-collection-array)
8-
- [Jackson Unmarshalling json with Unknown Properties](http://www.baeldung.com/jackson-deserialize-json-unknown-properties)
9-
- [Jackson – Custom Serializer](http://www.baeldung.com/jackson-custom-serialization)
10-
- [Jackson – Custom Deserializer](http://www.baeldung.com/jackson-deserialization)
11-
126

gson/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<dependency>
4242
<groupId>com.google.code.gson</groupId>
4343
<artifactId>gson</artifactId>
44-
<version>2.3</version>
44+
<version>${gson.version}</version>
4545
</dependency>
4646

4747
<!-- test scoped -->
@@ -76,7 +76,7 @@
7676
</dependencies>
7777

7878
<build>
79-
<finalName>jackson</finalName>
79+
<finalName>gson</finalName>
8080
<resources>
8181
<resource>
8282
<directory>src/main/resources</directory>
@@ -116,7 +116,7 @@
116116
<mysql-connector-java.version>5.1.31</mysql-connector-java.version>
117117

118118
<!-- marshalling -->
119-
<jackson.version>2.4.1</jackson.version>
119+
<gson.version>2.3</gson.version>
120120

121121
<!-- logging -->
122122
<org.slf4j.version>1.7.7</org.slf4j.version>

gson/src/test/java/org/baeldung/gson/deserialization/GenericSourceClass.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.baeldung.gson.deserialization;
2+
3+
public class GenericTargetClass<INTEGER> {
4+
5+
public INTEGER intField;
6+
7+
GenericTargetClass(final INTEGER value) {
8+
intField = value;
9+
}
10+
11+
//
12+
13+
@Override
14+
public String toString() {
15+
return "GenericTargetClass{" + "intField=" + intField + '}';
16+
}
17+
18+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.baeldung.gson.deserialization;
2+
3+
public class SourceClass {
4+
int intValue;
5+
String stringValue;
6+
7+
public SourceClass(int intValue, String stringValue) {
8+
this.intValue = intValue;
9+
this.stringValue = stringValue;
10+
}
11+
12+
@Override
13+
public String toString() {
14+
return "SourceClass{" +
15+
"intValue=" + intValue +
16+
", stringValue='" + stringValue + '\'' +
17+
'}';
18+
}
19+
20+
@Override
21+
public boolean equals(Object o) {
22+
if (this == o) return true;
23+
if (!(o instanceof SourceClass)) return false;
24+
25+
SourceClass that = (SourceClass) o;
26+
27+
if (intValue != that.intValue) return false;
28+
if (!stringValue.equals(that.stringValue)) return false;
29+
30+
return true;
31+
}
32+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.baeldung.gson.deserialization;
2+
3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonDeserializationContext;
5+
import com.google.gson.JsonDeserializer;
6+
import com.google.gson.JsonElement;
7+
import com.google.gson.JsonParseException;
8+
9+
import java.lang.reflect.Type;
10+
11+
public class SourceClassDeserializer implements JsonDeserializer<SourceClass[]> {
12+
13+
@Override
14+
public SourceClass[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
15+
JsonArray jArray = json.getAsJsonArray();
16+
SourceClass[] scArray = new SourceClass[jArray.size()];
17+
int index = 0;
18+
for (JsonElement jElement : jArray) {
19+
int i = jElement.getAsJsonObject().get("intValue").getAsInt();
20+
String s = jElement.getAsJsonObject().get("stringValue").getAsString();
21+
scArray[index++] = new SourceClass(i, s);
22+
}
23+
return scArray;
24+
}
25+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.baeldung.gson.deserialization;
2+
3+
public class TargetClass {
4+
public int intValue;
5+
public String stringValue;
6+
7+
public TargetClass(final int intValue, final String stringValue) {
8+
this.intValue = intValue;
9+
this.stringValue = stringValue;
10+
}
11+
12+
// API
13+
14+
@Override
15+
public String toString() {
16+
return "TargetClass{" + "intValue= " + intValue + ", stringValue= " + stringValue + '}';
17+
}
18+
19+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.baeldung.gson.deserialization;
2+
3+
import com.google.gson.JsonDeserializationContext;
4+
import com.google.gson.JsonDeserializer;
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.JsonObject;
7+
import com.google.gson.JsonParseException;
8+
9+
import java.lang.reflect.Type;
10+
11+
12+
public class TargetClassDeserializer implements JsonDeserializer<TargetClass> {
13+
14+
@Override
15+
public TargetClass deserialize(JsonElement jElement, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
16+
JsonObject jObject = jElement.getAsJsonObject();
17+
int intValue = jObject.get("valueInt").getAsInt();
18+
String stringValue = jObject.get("valueString").getAsString();
19+
return new TargetClass(intValue, stringValue);
20+
}
21+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package org.baeldung.gson.deserialization.test;
2+
3+
import static org.hamcrest.Matchers.instanceOf;
4+
import static org.junit.Assert.assertEquals;
5+
import static org.junit.Assert.assertThat;
6+
7+
import java.lang.reflect.Type;
8+
import java.util.ArrayList;
9+
import java.util.Arrays;
10+
import java.util.Collection;
11+
import java.util.List;
12+
13+
import org.baeldung.gson.deserialization.GenericTargetClass;
14+
import org.baeldung.gson.deserialization.SourceClass;
15+
import org.baeldung.gson.deserialization.SourceClassDeserializer;
16+
import org.baeldung.gson.deserialization.TargetClass;
17+
import org.baeldung.gson.deserialization.TargetClassDeserializer;
18+
import org.junit.Test;
19+
20+
import com.google.gson.Gson;
21+
import com.google.gson.GsonBuilder;
22+
import com.google.gson.JsonElement;
23+
import com.google.gson.JsonObject;
24+
import com.google.gson.JsonParser;
25+
import com.google.gson.reflect.TypeToken;
26+
27+
public class GsonDeserializationTest {
28+
29+
@Test
30+
public void givenJsonHasDissimilarFieldNamesButGsonMapsRight_whenUsingCustomDeserializer_thenCorrect() {
31+
final String jsonSourceObject = "{\"valueInt\":7,\"valueString\":\"seven\"}";
32+
final GsonBuilder gsonBldr = new GsonBuilder();
33+
gsonBldr.registerTypeAdapter(TargetClass.class, new TargetClassDeserializer());
34+
final Gson gson = gsonBldr.create();
35+
final TargetClass targetObject = gson.fromJson(jsonSourceObject, TargetClass.class);
36+
37+
assertEquals(targetObject.intValue, 7);
38+
assertEquals(targetObject.stringValue, "seven");
39+
}
40+
41+
@Test
42+
public void givenJsonWithArray_whenUsingGsonCustomDeserializer_thenMapsToArrayList() {
43+
// It is necessary to override the equals() method in SourceClass
44+
final String jsonSourceObject = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]";
45+
final GsonBuilder gsonBldr = new GsonBuilder();
46+
gsonBldr.registerTypeHierarchyAdapter(SourceClass[].class, new SourceClassDeserializer());
47+
final Gson gson = gsonBldr.create();
48+
49+
final List<SourceClass> targetList = Arrays.asList(gson.fromJson(jsonSourceObject, SourceClass[].class));
50+
51+
assertEquals(new SourceClass(1, "one"), targetList.get(0));
52+
}
53+
54+
@Test
55+
public void givenJsonHasDissimilarFieldNamesButGsonMapsRight_whenDeserializingManualy_thenCorrect() {
56+
final String jsonSourceObject = "{\"valueInt\":7,\"valueString\":\"seven\"}";
57+
final JsonParser jParser = new JsonParser();
58+
final JsonElement jElement = jParser.parse(jsonSourceObject);
59+
final JsonObject jObject = jElement.getAsJsonObject();
60+
final int intValue = jObject.get("valueInt").getAsInt();
61+
final String stringValue = jObject.get("valueString").getAsString();
62+
63+
final TargetClass targetObject = new TargetClass(intValue, stringValue);
64+
65+
assertEquals(targetObject.intValue, 7);
66+
assertEquals(targetObject.stringValue, "seven");
67+
}
68+
69+
@Test
70+
public void givenJsonHasExtraValuesButGsonIsIgnoringExtras_whenDeserializing_thenCorrect() {
71+
final String serializedSourceObject = "{\"intValue\":1,\"stringValue\":\"one\",\"extraString\":\"two\",\"extraFloat\":2.2}";
72+
final TargetClass targetObject = new Gson().fromJson(serializedSourceObject, TargetClass.class);
73+
74+
assertEquals(targetObject.intValue, 1);
75+
assertEquals(targetObject.stringValue, "one");
76+
}
77+
78+
@Test
79+
public void givenUsingGson_whenDeserializingGeneric_thenCorrect() {
80+
final Type genericTargetClassType = new TypeToken<GenericTargetClass<Integer>>() {
81+
}.getType();
82+
final String serializedSourceObject = "{\"intField\":1}";
83+
84+
final GenericTargetClass<Integer> targetObject = new Gson().fromJson(serializedSourceObject, genericTargetClassType);
85+
86+
assertEquals(targetObject.intField, new Integer(1));
87+
}
88+
89+
@Test
90+
public void givenUsingGson_whenDeserializingCollection_thenCorrect() {
91+
final String serializedSourceCollection = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]";
92+
final Type targetClassType = new TypeToken<ArrayList<TargetClass>>() {
93+
}.getType();
94+
95+
final Collection<TargetClass> targetCollection = new Gson().fromJson(serializedSourceCollection, targetClassType);
96+
assertThat(targetCollection, instanceOf(ArrayList.class));
97+
}
98+
}

gson/src/test/java/org/baeldung/gson/deserialization/test/GsonDeserializationUnitTest.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)