JIRA BAEL-6693, difference between Gson @Expose and @SerializedName (#14370)
Co-authored-by: parthiv39731 <parthiv39731@gmail.com>
This commit is contained in:
parent
5f025f6dd1
commit
571df122f7
|
@ -0,0 +1,31 @@
|
|||
package com.baeldung.gson.entities;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
|
||||
public class BankAccount {
|
||||
@Expose(serialize = false, deserialize = false)
|
||||
private String accountNumber;
|
||||
@Expose(serialize = true, deserialize = true)
|
||||
private String bankName;
|
||||
|
||||
public BankAccount(String accountNumber, String bankName) {
|
||||
this.accountNumber = accountNumber;
|
||||
this.bankName = bankName;
|
||||
}
|
||||
|
||||
public String getAccountNumber() {
|
||||
return accountNumber;
|
||||
}
|
||||
|
||||
public void setAccountNumber(String accountNumber) {
|
||||
this.accountNumber = accountNumber;
|
||||
}
|
||||
|
||||
public String getBankName() {
|
||||
return bankName;
|
||||
}
|
||||
|
||||
public void setBankName(String bankName) {
|
||||
this.bankName = bankName;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.baeldung.gson.entities;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public class Country {
|
||||
@SerializedName(value = "name")
|
||||
private String countryName;
|
||||
@SerializedName(value = "capital")
|
||||
private String countryCapital;
|
||||
@SerializedName(value = "continent")
|
||||
private String continentName;
|
||||
|
||||
public Country(String countryName, String countryCapital, String continentName) {
|
||||
this.countryName = countryName;
|
||||
this.countryCapital = countryCapital;
|
||||
this.continentName = continentName;
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Country{" +
|
||||
"countryName='" + countryName + '\'' +
|
||||
", countryCapital='" + countryCapital + '\'' +
|
||||
", continentName='" + continentName + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
public String getCountryName() {
|
||||
return countryName;
|
||||
}
|
||||
|
||||
public void setCountryName(String countryName) {
|
||||
this.countryName = countryName;
|
||||
}
|
||||
|
||||
public String getCountryCapital() {
|
||||
return countryCapital;
|
||||
}
|
||||
|
||||
public void setCountryCapital(String countryCapital) {
|
||||
this.countryCapital = countryCapital;
|
||||
}
|
||||
|
||||
public String getContinentName() {
|
||||
return continentName;
|
||||
}
|
||||
|
||||
public void setContinentName(String continentName) {
|
||||
this.continentName = continentName;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
package com.baeldung.gson.entities;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Person {
|
||||
|
||||
public Person(String firstName, String lastName, String emailAddress, String password, List<BankAccount> bankAccounts) {
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
this.emailAddress = emailAddress;
|
||||
this.password = password;
|
||||
this.bankAccounts = bankAccounts;
|
||||
}
|
||||
|
||||
@Expose(serialize = true)
|
||||
private String firstName;
|
||||
@Expose(serialize = true)
|
||||
private String lastName;
|
||||
@Expose()
|
||||
private String emailAddress;
|
||||
@Expose(serialize = false)
|
||||
private String password;
|
||||
|
||||
@Expose(serialize = true)
|
||||
private List<BankAccount> bankAccounts;
|
||||
|
||||
public List<BankAccount> getBankAccounts() {
|
||||
return bankAccounts;
|
||||
}
|
||||
|
||||
public void setBankAccounts(List<BankAccount> bankAccounts) {
|
||||
this.bankAccounts = bankAccounts;
|
||||
}
|
||||
|
||||
public String getLastName() {
|
||||
return lastName;
|
||||
}
|
||||
|
||||
public void setLastName(String lastName) {
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public String getEmailAddress() {
|
||||
return emailAddress;
|
||||
}
|
||||
|
||||
public void setEmailAddress(String emailAddress) {
|
||||
this.emailAddress = emailAddress;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public void setFirstName(String firstName) {
|
||||
this.firstName = firstName;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.baeldung.gson.exposevsserializedname;
|
||||
|
||||
import com.baeldung.gson.entities.Country;
|
||||
import com.baeldung.gson.entities.Person;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
public class PersonSerializer {
|
||||
private static final Gson configuredGson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
|
||||
private static final Gson defaultGson = new Gson();
|
||||
|
||||
public static String serializeWithConfiguredGson(Person person) {
|
||||
return configuredGson.toJson(person);
|
||||
}
|
||||
|
||||
public static String serializeWithDefaultGson(Person person) {
|
||||
return defaultGson.toJson(person);
|
||||
}
|
||||
|
||||
public static String toJsonString(Object obj) {
|
||||
return defaultGson.toJson(obj);
|
||||
}
|
||||
|
||||
public static Country fromJsonString(String json) {
|
||||
return defaultGson.fromJson(json, Country.class);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package com.baeldung.gson.exposevsserializedname;
|
||||
|
||||
import com.baeldung.gson.entities.BankAccount;
|
||||
import com.baeldung.gson.entities.Country;
|
||||
import com.baeldung.gson.entities.Person;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class PersonSerializerUnitTest {
|
||||
private static final Logger logger = LoggerFactory.getLogger(PersonSerializerUnitTest.class);
|
||||
private Person person = null;
|
||||
private Country country = null;
|
||||
@Before
|
||||
public void preparePersonObj() {
|
||||
List<BankAccount> accounts = new ArrayList<>();
|
||||
BankAccount acc1 = new BankAccount("4565432312", "Bank of America");
|
||||
BankAccount acc2 = new BankAccount("4565432616", "Bank of America");
|
||||
accounts.add(acc1);
|
||||
accounts.add(acc2);
|
||||
person = new Person(
|
||||
"James", "Cameron", "james.cameron@gmail.com",
|
||||
"secret", accounts);
|
||||
|
||||
country = new Country("India", "New Delhi", "Asia");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void WhenUseCustomGson_ThenDonotSerializeAccountNumAndPassword () {
|
||||
|
||||
String personJson = PersonSerializer.serializeWithConfiguredGson(person);
|
||||
logger.info(personJson);
|
||||
assertFalse("Test failed: password found", personJson.contains("password"));
|
||||
assertFalse("Test failed: account number found", personJson.contains("accountNumber:"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void WhenUseDefaultGson_ThenSerializeAccountNumAndPassword () {
|
||||
|
||||
String personJson = PersonSerializer.serializeWithDefaultGson(person);
|
||||
logger.info(personJson);
|
||||
assertTrue("Test failed: password not found", personJson.contains("password"));
|
||||
assertTrue("Test failed: account number not found", personJson.contains("accountNumber"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUseSerializedAnnotation_ThenUseSerializedNameinJsonString() {
|
||||
String countryJson = PersonSerializer.toJsonString(country);
|
||||
logger.info(countryJson);
|
||||
assertFalse("Test failed: No change in the keys", countryJson.contains("countryName"));
|
||||
assertFalse("Test failed: No change in the keys", countryJson.contains("contentName"));
|
||||
assertFalse("Test failed: No change in the keys", countryJson.contains("countryCapital"));
|
||||
|
||||
assertTrue("Test failed: No change in the keys", countryJson.contains("name"));
|
||||
assertTrue("Test failed: No change in the keys", countryJson.contains("continent"));
|
||||
assertTrue("Test failed: No change in the keys", countryJson.contains("capital"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenJsonStrCreatedWithCustomKeys_ThenCreateObjUsingGson() {
|
||||
String countryJson = PersonSerializer.toJsonString(country);
|
||||
Country country = PersonSerializer.fromJsonString(countryJson);
|
||||
logger.info(country.toString());
|
||||
assertEquals("Fail: Object creation failed", country.getCountryName(), "India");
|
||||
assertEquals("Fail: Object creation failed", country.getCountryCapital(), "New Delhi");
|
||||
assertEquals("Fail: Object creation failed", country.getContinentName(), "Asia");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue