Skip to content

Commit ec2bfa7

Browse files
lsoaresmogronalol
authored andcommitted
Test Serialize/Deserialize Optional with Jackson
1 parent 5218116 commit ec2bfa7

3 files changed

Lines changed: 109 additions & 4 deletions

File tree

jackson/pom.xml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@
6767
<version>${jackson.version}</version>
6868
</dependency>
6969

70+
<dependency>
71+
<groupId>com.fasterxml.jackson.datatype</groupId>
72+
<artifactId>jackson-datatype-jdk8</artifactId>
73+
<version>${jackson.version}</version>
74+
</dependency>
75+
7076
<dependency>
7177
<groupId>joda-time</groupId>
7278
<artifactId>joda-time</artifactId>
@@ -128,8 +134,8 @@
128134
<version>${mockito.version}</version>
129135
<scope>test</scope>
130136
</dependency>
131-
132-
<!-- logging -->
137+
138+
<!-- logging -->
133139

134140
<dependency>
135141
<groupId>org.slf4j</groupId>
@@ -152,7 +158,7 @@
152158
<groupId>org.slf4j</groupId>
153159
<artifactId>log4j-over-slf4j</artifactId>
154160
<version>${org.slf4j.version}</version>
155-
</dependency>
161+
</dependency>
156162

157163
</dependencies>
158164

@@ -198,7 +204,7 @@
198204
<!-- util -->
199205
<guava.version>19.0</guava.version>
200206
<commons-lang3.version>3.5</commons-lang3.version>
201-
<commons-io.version>2.5</commons-io.version>
207+
<commons-io.version>2.5</commons-io.version>
202208
<joda-time.version>2.9.6</joda-time.version>
203209
<gson.version>2.8.0</gson.version>
204210
<commons-collections4.version>4.1</commons-collections4.version>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.baeldung.jackson.miscellaneous.mixin;
2+
3+
import java.util.Optional;
4+
5+
public class Book {
6+
7+
private String title;
8+
private Optional<String> subTitle;
9+
10+
public String getTitle() {
11+
return title;
12+
}
13+
14+
public void setTitle(String title) {
15+
this.title = title;
16+
}
17+
18+
public Optional<String> getSubTitle() {
19+
return subTitle;
20+
}
21+
22+
public void setSubTitle(Optional<String> subTitle) {
23+
this.subTitle = subTitle;
24+
}
25+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.baeldung.jackson.miscellaneous.mixin;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
6+
import static io.restassured.path.json.JsonPath.from;
7+
import java.io.IOException;
8+
import java.util.Optional;
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
import org.junit.Test;
11+
12+
public class OptionalTypeTest {
13+
14+
ObjectMapper mapper = new ObjectMapper()
15+
.registerModule(new Jdk8Module());
16+
17+
@Test
18+
public void givenOptional_whenSerializing_thenValueInJson() throws JsonProcessingException {
19+
20+
// arrange
21+
String subTitle = "The Parish Boy's Progress";
22+
Book book = new Book();
23+
book.setTitle("Oliver Twist");
24+
book.setSubTitle(Optional.of(subTitle));
25+
26+
// act
27+
String result = mapper.writeValueAsString(book);
28+
29+
// assert
30+
assertThat(from(result).getString("subTitle")).isEqualTo(subTitle);
31+
}
32+
33+
@Test
34+
public void givenEmptyOptional_whenSerializing_thenNullValue() throws JsonProcessingException {
35+
36+
// arrange
37+
Book book = new Book();
38+
book.setTitle("Oliver Twist");
39+
book.setSubTitle(Optional.empty());
40+
41+
// act
42+
String result = mapper.writeValueAsString(book);
43+
44+
// assert
45+
assertThat(from(result).getString("subTitle")).isNull();
46+
}
47+
48+
@Test
49+
public void givenField_whenDeserializing_thenOptionalWithValue() throws IOException {
50+
51+
// arrange
52+
String subTitle = "The Parish Boy's Progress";
53+
String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": \"" + subTitle + "\" }";
54+
55+
// act
56+
Book result = mapper.readValue(book, Book.class);
57+
58+
// assert
59+
assertThat(result.getSubTitle()).isEqualTo(Optional.of(subTitle));
60+
}
61+
62+
@Test
63+
public void givenEmptyField_whenDeserializing_thenEmptyOptional() throws IOException {
64+
65+
// arrange
66+
String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": null }";
67+
68+
// act
69+
Book result = mapper.readValue(book, Book.class);
70+
71+
// assert
72+
assertThat(result.getSubTitle()).isEmpty();
73+
}
74+
}

0 commit comments

Comments
 (0)