Skip to content

Commit 9254032

Browse files
author
eugenp
committed
gson serialization work
1 parent 0b28b4b commit 9254032

File tree

4 files changed

+154
-0
lines changed

4 files changed

+154
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.baeldung.gson.serialization;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.lang.reflect.Type;
6+
import java.util.Collection;
7+
8+
import org.junit.Test;
9+
10+
import com.google.common.collect.Lists;
11+
import com.google.gson.Gson;
12+
import com.google.gson.GsonBuilder;
13+
import com.google.gson.reflect.TypeToken;
14+
15+
public class GsonSerializationTest {
16+
17+
@Test
18+
public void givenCollection_whenSerializing_thenCorrect() {
19+
final Collection<SourceClass> sourceCollection = Lists.newArrayList(new SourceClass(1, "one"), new SourceClass(2, "two"));
20+
final Type sourceCollectionType = new TypeToken<Collection<SourceClass>>() {
21+
}.getType();
22+
final String jsonCollection = new Gson().toJson(sourceCollection, sourceCollectionType);
23+
24+
// test
25+
final Collection<SourceClass> testCollection = new Gson().fromJson(jsonCollection, sourceCollectionType);
26+
assertEquals(sourceCollection, testCollection);
27+
}
28+
29+
@Test
30+
public void givenArrayOfObjects_whenSerializing_thenMapToJsonCollection() {
31+
final SourceClass[] sourceArray = { new SourceClass(1, "one"), new SourceClass(2, "two") };
32+
final String jsonCollection = new Gson().toJson(sourceArray);
33+
34+
// test
35+
final String estimatedResult = "[{\"intValue\":1,\"stringValue\":\"one\"},{\"intValue\":2,\"stringValue\":\"two\"}]";
36+
assertEquals(estimatedResult, jsonCollection);
37+
}
38+
39+
@Test
40+
public void givenUsingCustomSerializer_whenSerializingObjectToJsonWithDissimilarFieldNames_thenCorrect() {
41+
final SourceClass sourceObject = new SourceClass(7, "seven");
42+
final GsonBuilder gsonBuildr = new GsonBuilder();
43+
gsonBuildr.registerTypeAdapter(SourceClass.class, new SourceClassChangingFieldNamesSerializer());
44+
final Gson gson = gsonBuildr.create();
45+
final String jsonString = gson.toJson(sourceObject);
46+
47+
// test
48+
final String estimatedResult = "{\"otherIntValue\":7,\"otherStringValue\":\"seven\"}";
49+
assertEquals(estimatedResult, jsonString);
50+
}
51+
52+
@Test
53+
public void givenUsingCustomSerializer_whenSerializingObject_thenFieldIgnored() {
54+
final SourceClass sourceObject = new SourceClass(7, "seven");
55+
final GsonBuilder gsonBuildr = new GsonBuilder();
56+
gsonBuildr.registerTypeAdapter(SourceClass.class, new SourceClassIgnoringExtraFieldsSerializer());
57+
final Gson gson = gsonBuildr.create();
58+
final String jsonString = gson.toJson(sourceObject);
59+
60+
// test
61+
final String estimatedResult = "{\"intValue\":7}";
62+
assertEquals(estimatedResult, jsonString);
63+
}
64+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.baeldung.gson.serialization;
2+
3+
public class SourceClass {
4+
public int intValue;
5+
public String stringValue;
6+
7+
public SourceClass(final int intValue, final String stringValue) {
8+
this.intValue = intValue;
9+
this.stringValue = stringValue;
10+
}
11+
12+
@Override
13+
public int hashCode() {
14+
final int prime = 31;
15+
int result = 1;
16+
result = prime * result + intValue;
17+
result = prime * result + ((stringValue == null) ? 0 : stringValue.hashCode());
18+
return result;
19+
}
20+
21+
@Override
22+
public boolean equals(final Object obj) {
23+
if (this == obj)
24+
return true;
25+
if (obj == null)
26+
return false;
27+
if (getClass() != obj.getClass())
28+
return false;
29+
final SourceClass other = (SourceClass) obj;
30+
if (intValue != other.intValue)
31+
return false;
32+
if (stringValue == null) {
33+
if (other.stringValue != null)
34+
return false;
35+
} else if (!stringValue.equals(other.stringValue))
36+
return false;
37+
return true;
38+
}
39+
40+
@Override
41+
public String toString() {
42+
return "SourceClass{" + "intValue=" + intValue + ", stringValue='" + stringValue + '\'' + '}';
43+
}
44+
45+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.baeldung.gson.serialization;
2+
3+
import java.lang.reflect.Type;
4+
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.JsonObject;
7+
import com.google.gson.JsonSerializationContext;
8+
import com.google.gson.JsonSerializer;
9+
10+
public class SourceClassChangingFieldNamesSerializer implements JsonSerializer<SourceClass> {
11+
12+
@Override
13+
public JsonElement serialize(final SourceClass src, final Type typeOfSrc, final JsonSerializationContext context) {
14+
final String otherIntValueName = "otherIntValue";
15+
final String otherStringValueName = "otherStringValue";
16+
17+
final JsonObject jObject = new JsonObject();
18+
jObject.addProperty(otherIntValueName, src.intValue);
19+
jObject.addProperty(otherStringValueName, src.stringValue);
20+
21+
return jObject;
22+
}
23+
24+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.baeldung.gson.serialization;
2+
3+
import java.lang.reflect.Type;
4+
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.JsonObject;
7+
import com.google.gson.JsonSerializationContext;
8+
import com.google.gson.JsonSerializer;
9+
10+
public class SourceClassIgnoringExtraFieldsSerializer implements JsonSerializer<SourceClass> {
11+
12+
@Override
13+
public JsonElement serialize(final SourceClass src, final Type typeOfSrc, final JsonSerializationContext context) {
14+
final String intValue = "intValue";
15+
final JsonObject jObject = new JsonObject();
16+
jObject.addProperty(intValue, src.intValue);
17+
18+
return jObject;
19+
}
20+
21+
}

0 commit comments

Comments
 (0)