Bael 2721 - JSON deserialization mapping different JSON fields to same Java field (#6434)

* BAEL-2721 Examples of @JsonAlias and Gson's alternate parameter

* BAEL-2721 Update class and method names for JsonAlias and GsonAlternate
This commit is contained in:
pcoates33 2019-03-13 04:54:34 +00:00 committed by maibin
parent 57a1096c1f
commit 8ecfd8de08
4 changed files with 161 additions and 0 deletions

View File

@ -0,0 +1,40 @@
package org.baeldung.gson.entities;
import com.google.gson.annotations.SerializedName;
public class Weather {
@SerializedName(value = "location", alternate = "place")
private String location;
@SerializedName(value = "temp", alternate = "temperature")
private int temp;
@SerializedName(value = "outlook", alternate = "weather")
private String outlook;
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public int getTemp() {
return temp;
}
public void setTemp(int temp) {
this.temp = temp;
}
public String getOutlook() {
return outlook;
}
public void setOutlook(String outlook) {
this.outlook = outlook;
}
}

View File

@ -0,0 +1,39 @@
package org.baeldung.gson.deserialization;
import static org.junit.Assert.assertEquals;
import org.baeldung.gson.entities.Weather;
import org.junit.Test;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonAlternateUnitTest {
@Test
public void givenTwoJsonFormats_whenDeserialized_thenWeatherObjectsCreated() throws Exception {
Gson gson = new GsonBuilder().create();
Weather weather = gson.fromJson("{" +
"\"location\": \"London\"," +
"\"temp\": 15," +
"\"weather\": \"Cloudy\"" +
"}", Weather.class);
assertEquals("London", weather.getLocation());
assertEquals("Cloudy", weather.getOutlook());
assertEquals(15, weather.getTemp());
weather = gson.fromJson("{" +
"\"place\": \"Lisbon\"," +
"\"temperature\": 35," +
"\"outlook\": \"Sunny\"" +
"}", Weather.class);
assertEquals("Lisbon", weather.getLocation());
assertEquals("Sunny", weather.getOutlook());
assertEquals(35, weather.getTemp());
}
}

View File

@ -0,0 +1,44 @@
package com.baeldung.jackson.entities;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Weather {
@JsonProperty("location")
@JsonAlias("place")
private String location;
@JsonProperty("temp")
@JsonAlias("temperature")
private int temp;
@JsonProperty("outlook")
@JsonAlias("weather")
private String outlook;
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public int getTemp() {
return temp;
}
public void setTemp(int temp) {
this.temp = temp;
}
public String getOutlook() {
return outlook;
}
public void setOutlook(String outlook) {
this.outlook = outlook;
}
}

View File

@ -0,0 +1,38 @@
package com.baeldung.jackson.deserialization.jsonalias;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.baeldung.jackson.entities.Weather;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAliasUnitTest {
@Test
public void givenTwoJsonFormats_whenDeserialized_thenWeatherObjectsCreated() throws Exception {
ObjectMapper mapper = new ObjectMapper();
Weather weather = mapper.readValue("{" +
"\"location\": \"London\"," +
"\"temp\": 15," +
"\"weather\": \"Cloudy\"" +
"}", Weather.class);
assertEquals("London", weather.getLocation());
assertEquals("Cloudy", weather.getOutlook());
assertEquals(15, weather.getTemp());
weather = mapper.readValue("{" +
"\"place\": \"Lisbon\"," +
"\"temperature\": 35," +
"\"outlook\": \"Sunny\"" +
"}", Weather.class);
assertEquals("Lisbon", weather.getLocation());
assertEquals("Sunny", weather.getOutlook());
assertEquals(35, weather.getTemp());
}
}