Merge pull request #14182 from sam-gardner/BAEL-6312-Json-merge-Jackson-annotation
BAEL-6312 Add example code for @JsonMerge Jackson annotation
This commit is contained in:
commit
62d0cbfd71
|
@ -0,0 +1,37 @@
|
|||
package com.baeldung.jackson.jsonmerge;
|
||||
|
||||
public class Keyboard {
|
||||
|
||||
private String style;
|
||||
private String layout;
|
||||
|
||||
public Keyboard(){
|
||||
super();
|
||||
}
|
||||
|
||||
public Keyboard(String style, String layout) {
|
||||
this.style = style;
|
||||
this.layout = layout;
|
||||
}
|
||||
|
||||
public String getStyle() {
|
||||
return style;
|
||||
}
|
||||
|
||||
public void setStyle(String style) {
|
||||
this.style = style;
|
||||
}
|
||||
|
||||
public String getLayout() {
|
||||
return layout;
|
||||
}
|
||||
|
||||
public void setLayout(String layout) {
|
||||
this.layout = layout;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Keyboard{" + "style='" + style + '\'' + ", layout='" + layout + '\'' + '}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package com.baeldung.jackson.jsonmerge;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonMerge;
|
||||
|
||||
public class ObjectWithMap {
|
||||
|
||||
private String name;
|
||||
@JsonMerge
|
||||
private Map<String, String> stringPairs;
|
||||
|
||||
public ObjectWithMap(String name, Map<String, String> stringPairs) {
|
||||
this.name = name;
|
||||
this.stringPairs = stringPairs;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Map<String, String> getStringPairs() {
|
||||
return stringPairs;
|
||||
}
|
||||
|
||||
public void setStringPairs(Map<String, String> stringPairs) {
|
||||
this.stringPairs = stringPairs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ObjectWithMap{" + "name='" + name + '\'' + ", something=" + stringPairs + '}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package com.baeldung.jackson.jsonmerge;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonMerge;
|
||||
|
||||
public class ProgrammerAnnotated {
|
||||
|
||||
private String name;
|
||||
private String favouriteLanguage;
|
||||
@JsonMerge
|
||||
private Keyboard keyboard;
|
||||
|
||||
public ProgrammerAnnotated(String name, String favouriteLanguage, Keyboard keyboard) {
|
||||
this.name = name;
|
||||
this.favouriteLanguage = favouriteLanguage;
|
||||
this.keyboard = keyboard;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getFavouriteLanguage() {
|
||||
return favouriteLanguage;
|
||||
}
|
||||
|
||||
public Keyboard getKeyboard() {
|
||||
return keyboard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Programmer{" + "name='" + name + '\'' + ", favouriteLanguage='" + favouriteLanguage + '\'' + ", keyboard=" + keyboard + '}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.baeldung.jackson.jsonmerge;
|
||||
|
||||
public class ProgrammerNotAnnotated {
|
||||
|
||||
private String name;
|
||||
private String favouriteLanguage;
|
||||
private Keyboard keyboard;
|
||||
|
||||
public ProgrammerNotAnnotated(String name, String favouriteLanguage, Keyboard keyboard) {
|
||||
this.name = name;
|
||||
this.favouriteLanguage = favouriteLanguage;
|
||||
this.keyboard = keyboard;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getFavouriteLanguage() {
|
||||
return favouriteLanguage;
|
||||
}
|
||||
|
||||
public void setFavouriteLanguage(String favouriteLanguage) {
|
||||
this.favouriteLanguage = favouriteLanguage;
|
||||
}
|
||||
|
||||
public Keyboard getKeyboard() {
|
||||
return keyboard;
|
||||
}
|
||||
|
||||
public void setKeyboard(Keyboard keyboard) {
|
||||
this.keyboard = keyboard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Programmer{" + "name='" + name + '\'' + ", favouriteLanguage='" + favouriteLanguage + '\'' + ", keyboard=" + keyboard + '}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package com.baeldung.jackson.jsonmerge;
|
||||
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.ObjectReader;
|
||||
|
||||
public class JsonMergeUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenAnObjectAndJson_whenUsingJsonMerge_thenExpectUpdateInPOJO() throws JsonProcessingException {
|
||||
String newData = "{\"favouriteLanguage\":\"Java\",\"keyboard\":{\"style\":\"Mechanical\"}}";
|
||||
ProgrammerAnnotated programmerToUpdate = new ProgrammerAnnotated("John", "C++", new Keyboard("Membrane", "US"));
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
ProgrammerAnnotated update = objectMapper.readerForUpdating(programmerToUpdate)
|
||||
.readValue(newData);
|
||||
|
||||
assert (update.getFavouriteLanguage()).equals("Java");
|
||||
// Only works with annotation
|
||||
assert (update.getKeyboard()
|
||||
.getLayout()).equals("US");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnObjectAndJson_whenNotUsingJsonMerge_thenExpectNoUpdateInPOJO() throws JsonProcessingException {
|
||||
String newData = "{\"favouriteLanguage\":\"Java\",\"keyboard\":{\"style\":\"Mechanical\"}}";
|
||||
ProgrammerNotAnnotated programmerToUpdate = new ProgrammerNotAnnotated("John", "C++", new Keyboard("Membrane", "US"));
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
ObjectReader objectReader = objectMapper.readerForUpdating(programmerToUpdate);
|
||||
ProgrammerNotAnnotated update = objectReader.readValue(newData);
|
||||
|
||||
assert (update.getFavouriteLanguage()).equals("Java");
|
||||
assertNull(update.getKeyboard()
|
||||
.getLayout());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenAnObjectWithAMap_whenUsingJsonMerge_thenExpectAllFieldsInMap() throws JsonProcessingException {
|
||||
String newData = "{\"stringPairs\":{\"field1\":\"value1\",\"field2\":\"value2\"}}";
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("field3", "value3");
|
||||
ObjectWithMap objectToUpdateWith = new ObjectWithMap("James", map);
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
ObjectWithMap update = objectMapper.readerForUpdating(objectToUpdateWith)
|
||||
.readValue(newData);
|
||||
|
||||
assertTrue(update.getStringPairs()
|
||||
.containsKey("field1"));
|
||||
assertTrue(update.getStringPairs()
|
||||
.containsKey("field2"));
|
||||
assertTrue(update.getStringPairs()
|
||||
.containsKey("field3"));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue