diff --git a/json-modules/gson-2/README.md b/json-modules/gson-2/README.md new file mode 100644 index 0000000000..40d5515567 --- /dev/null +++ b/json-modules/gson-2/README.md @@ -0,0 +1,7 @@ +## GSON + +This module contains articles about Gson + +### Relevant Articles: + + diff --git a/json-modules/gson-2/pom.xml b/json-modules/gson-2/pom.xml new file mode 100644 index 0000000000..aa451bdeed --- /dev/null +++ b/json-modules/gson-2/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + gson-2 + gson-2 + + + com.baeldung + json-modules + 1.0.0-SNAPSHOT + + + + + com.google.code.gson + gson + ${gson.version} + + + + + 2.10.1 + + + \ No newline at end of file diff --git a/json-modules/gson-2/src/main/java/com/baeldung/gson/parsingerrors/Person.java b/json-modules/gson-2/src/main/java/com/baeldung/gson/parsingerrors/Person.java new file mode 100644 index 0000000000..387d6e1582 --- /dev/null +++ b/json-modules/gson-2/src/main/java/com/baeldung/gson/parsingerrors/Person.java @@ -0,0 +1,15 @@ +package com.baeldung.gson.parsingerrors; + +public class Person { + + public String name; + + public String getName() { + return name; + } + + public Person(String name) { + this.name = name; + } + +} diff --git a/json-modules/gson-2/src/test/java/com/baeldung/gson/parsingerror/GsonErrorDemoUnitTest.java b/json-modules/gson-2/src/test/java/com/baeldung/gson/parsingerror/GsonErrorDemoUnitTest.java new file mode 100644 index 0000000000..d97f695ddf --- /dev/null +++ b/json-modules/gson-2/src/test/java/com/baeldung/gson/parsingerror/GsonErrorDemoUnitTest.java @@ -0,0 +1,55 @@ +package com.baeldung.gson.parsingerror; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.lang.reflect.Type; +import java.util.Collection; + +import org.junit.jupiter.api.Test; + +import com.baeldung.gson.parsingerrors.Person; +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.google.gson.reflect.TypeToken; + +class GsonErrorDemoUnitTest { + + @Test + void givenAJsonArray_WhenTellingGsonToExpectAnObject_ThenThrows() { + assertThrows(JsonSyntaxException.class, () -> { + Person person = new Gson().fromJson("[{\"name\":\"John\"},{\"name\":\"James\"}]", Person.class); + }); + } + + @Test + void givenAJsonArray_WhenParsingIntoAnArray_ThenOK() { + Person[] personArray = new Gson().fromJson("[{\"name\":\"John\"},{\"name\":\"James\"}]", Person[].class); + assertThat(personArray).extracting(Person::getName) + .containsExactly("John", "James"); + } + + @Test + void givenAJsonArray_WhenParsingIntoACollection_ThenOK() { + Type collectionType = new TypeToken>() { + }.getType(); + Collection personCollection = new Gson().fromJson("[{\"name\":\"John\"},{\"name\":\"James\"}]", collectionType); + assertThat(personCollection).extracting(Person::getName) + .containsExactly("John", "James"); + } + + @Test + void givenAJsonObject_WhenTellingGsonToExpectAnArray_ThenThrows() { + assertThrows(JsonSyntaxException.class, () -> { + Person[] personArray = new Gson().fromJson("{\"name\":\"John\"}", Person[].class); + }); + } + + @Test + void givenAJsonObject_WhenParsingIntoAnObject_ThenOK() { + Person person = new Gson().fromJson("{\"name\":\"John\"}", Person.class); + assertEquals("John", person.getName()); + } + +} diff --git a/json-modules/pom.xml b/json-modules/pom.xml index 2deb53d533..15a066daa4 100644 --- a/json-modules/pom.xml +++ b/json-modules/pom.xml @@ -18,6 +18,7 @@ json-2 json-path gson + gson-2