From 6f9026a18322a16e1e15b0663e9d1e09d9af083f Mon Sep 17 00:00:00 2001 From: eugenp Date: Sat, 21 Dec 2013 16:18:32 +0200 Subject: [PATCH] jackson work --- .../java/org/baeldung/jackson/BarDto.java | 42 +++++++ .../org/baeldung/jackson/JacksonUnitTest.java | 112 ++++++++++++++++-- .../test/java/org/baeldung/jackson/MyDto.java | 47 ++++++++ .../baeldung/jackson/MyDtoIgnoreUnkown.java | 50 ++++++++ 4 files changed, 243 insertions(+), 8 deletions(-) create mode 100644 jackson/src/test/java/org/baeldung/jackson/BarDto.java create mode 100644 jackson/src/test/java/org/baeldung/jackson/MyDto.java create mode 100644 jackson/src/test/java/org/baeldung/jackson/MyDtoIgnoreUnkown.java diff --git a/jackson/src/test/java/org/baeldung/jackson/BarDto.java b/jackson/src/test/java/org/baeldung/jackson/BarDto.java new file mode 100644 index 0000000000..0318dd0616 --- /dev/null +++ b/jackson/src/test/java/org/baeldung/jackson/BarDto.java @@ -0,0 +1,42 @@ +package org.baeldung.jackson; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(value = { "intValue" }) +public class BarDto { + + private String stringValue; + private int intValue; + private boolean booleanValue; + + public BarDto() { + super(); + } + + // API + + public String getStringValue() { + return stringValue; + } + + public void setStringValue(final String stringValue) { + this.stringValue = stringValue; + } + + public int getIntValue() { + return intValue; + } + + public void setIntValue(final int intValue) { + this.intValue = intValue; + } + + public boolean isBooleanValue() { + return booleanValue; + } + + public void setBooleanValue(final boolean booleanValue) { + this.booleanValue = booleanValue; + } + +} diff --git a/jackson/src/test/java/org/baeldung/jackson/JacksonUnitTest.java b/jackson/src/test/java/org/baeldung/jackson/JacksonUnitTest.java index dceb2cc4f3..3bb2041a17 100644 --- a/jackson/src/test/java/org/baeldung/jackson/JacksonUnitTest.java +++ b/jackson/src/test/java/org/baeldung/jackson/JacksonUnitTest.java @@ -1,37 +1,133 @@ package org.baeldung.jackson; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; + import java.io.IOException; +import java.util.List; import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; +import com.google.common.collect.Lists; public class JacksonUnitTest { - // tests + // tests - single entity to json @Test - public final void whenDtoHasOnlyDefaultValues_thenCorrect() throws JsonParseException, IOException { + public final void givenOnlyNonDefaultValuesAreSerialized_whenDtoHasOnlyDefaultValues_thenCorrect() throws JsonParseException, IOException { final ObjectMapper mapper = new ObjectMapper(); - final String fooDtoAsString = mapper.writeValueAsString(new FooDto()); - System.out.println(fooDtoAsString); + final String dtoAsString = mapper.writeValueAsString(new FooDto()); + + assertThat(dtoAsString, not(containsString("intValue"))); + System.out.println(dtoAsString); } @Test - public final void whenDtoHasNonDefaultValue_thenCorrect() throws JsonParseException, IOException { + public final void givenOnlyNonDefaultValuesAreSerialized_whenDtoHasNonDefaultValue_thenCorrect() throws JsonParseException, IOException { final ObjectMapper mapper = new ObjectMapper(); final FooDto dtoObject = new FooDto(); dtoObject.setBooleanValue(true); - final String fooDtoAsString = mapper.writeValueAsString(dtoObject); - System.out.println(fooDtoAsString); + final String dtoAsString = mapper.writeValueAsString(dtoObject); + + assertThat(dtoAsString, containsString("booleanValue")); + System.out.println(dtoAsString); } + @Test + public final void givenFieldIsIgnored_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { + final ObjectMapper mapper = new ObjectMapper(); + final BarDto dtoObject = new BarDto(); + dtoObject.setBooleanValue(true); + + final String dtoAsString = mapper.writeValueAsString(dtoObject); + + assertThat(dtoAsString, not(containsString("intValue"))); + assertThat(dtoAsString, containsString("booleanValue")); + System.out.println(dtoAsString); + } + + // tests - multiple entities to json + + @Test + public final void whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { + final List listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false)); + + final ObjectMapper mapper = new ObjectMapper(); + final String dtosAsString = mapper.writeValueAsString(listOfDtos); + + System.out.println(dtosAsString); + } + + // tests - json to single entity + + @Test + public final void whenDeserializingAJsonToAClass_thenCorrect() throws JsonParseException, JsonMappingException, IOException { + final String jsonAsString = "{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true}"; + final ObjectMapper mapper = new ObjectMapper(); + + final MyDto readValue = mapper.readValue(jsonAsString, MyDto.class); + + assertNotNull(readValue); + assertThat(readValue.getStringValue(), equalTo("a")); + } + + @Test(expected = UnrecognizedPropertyException.class) + public final void givenJsonHasUnkownValues_whenDeserializingAJsonToAClass_thenExceptionIsThrown() throws JsonParseException, JsonMappingException, IOException { + final String jsonAsString = "{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true,\"stringValue2\":\"something\"}"; + final ObjectMapper mapper = new ObjectMapper(); + + final MyDto readValue = mapper.readValue(jsonAsString, MyDto.class); + + assertNotNull(readValue); + assertThat(readValue.getStringValue(), equalTo("a")); + assertThat(readValue.isBooleanValue(), equalTo(true)); + assertThat(readValue.getIntValue(), equalTo(1)); + } + + @Test + public final void givenJsonHasUnkownValuesButJacksonIsIgnoringUnkownFields_whenDeserializingAJsonToAClass_thenCorrect() throws JsonParseException, JsonMappingException, IOException { + final String jsonAsString = "{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true,\"stringValue2\":\"something\"}"; + final ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + final MyDto readValue = mapper.readValue(jsonAsString, MyDto.class); + + assertNotNull(readValue); + assertThat(readValue.getStringValue(), equalTo("a")); + assertThat(readValue.isBooleanValue(), equalTo(true)); + assertThat(readValue.getIntValue(), equalTo(1)); + } + + @Test + public final void givenJsonHasUnkownValuesButUnkownFieldsAreIgnoredOnClass_whenDeserializingAJsonToAClass_thenCorrect() throws JsonParseException, JsonMappingException, IOException { + final String jsonAsString = "{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true,\"stringValue2\":\"something\"}"; + final ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + final MyDtoIgnoreUnkown readValue = mapper.readValue(jsonAsString, MyDtoIgnoreUnkown.class); + + assertNotNull(readValue); + assertThat(readValue.getStringValue(), equalTo("a")); + assertThat(readValue.isBooleanValue(), equalTo(true)); + assertThat(readValue.getIntValue(), equalTo(1)); + } + + // tests - json to multiple entities + } /* Article Ideas: - Deserializing with a custom JsonParser - +- Jackson Ignore: ignore specific fields at field level, at class level, */ diff --git a/jackson/src/test/java/org/baeldung/jackson/MyDto.java b/jackson/src/test/java/org/baeldung/jackson/MyDto.java new file mode 100644 index 0000000000..9334f2a0ed --- /dev/null +++ b/jackson/src/test/java/org/baeldung/jackson/MyDto.java @@ -0,0 +1,47 @@ +package org.baeldung.jackson; + +public class MyDto { + + private String stringValue; + private int intValue; + private boolean booleanValue; + + public MyDto() { + super(); + } + + public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { + super(); + + this.stringValue = stringValue; + this.intValue = intValue; + this.booleanValue = booleanValue; + } + + // API + + public String getStringValue() { + return stringValue; + } + + public void setStringValue(final String stringValue) { + this.stringValue = stringValue; + } + + public int getIntValue() { + return intValue; + } + + public void setIntValue(final int intValue) { + this.intValue = intValue; + } + + public boolean isBooleanValue() { + return booleanValue; + } + + public void setBooleanValue(final boolean booleanValue) { + this.booleanValue = booleanValue; + } + +} diff --git a/jackson/src/test/java/org/baeldung/jackson/MyDtoIgnoreUnkown.java b/jackson/src/test/java/org/baeldung/jackson/MyDtoIgnoreUnkown.java new file mode 100644 index 0000000000..b83dc9957d --- /dev/null +++ b/jackson/src/test/java/org/baeldung/jackson/MyDtoIgnoreUnkown.java @@ -0,0 +1,50 @@ +package org.baeldung.jackson; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class MyDtoIgnoreUnkown { + + private String stringValue; + private int intValue; + private boolean booleanValue; + + public MyDtoIgnoreUnkown() { + super(); + } + + public MyDtoIgnoreUnkown(final String stringValue, final int intValue, final boolean booleanValue) { + super(); + + this.stringValue = stringValue; + this.intValue = intValue; + this.booleanValue = booleanValue; + } + + // API + + public String getStringValue() { + return stringValue; + } + + public void setStringValue(final String stringValue) { + this.stringValue = stringValue; + } + + public int getIntValue() { + return intValue; + } + + public void setIntValue(final int intValue) { + this.intValue = intValue; + } + + public boolean isBooleanValue() { + return booleanValue; + } + + public void setBooleanValue(final boolean booleanValue) { + this.booleanValue = booleanValue; + } + +}