Skip to content

Commit 380ee0a

Browse files
authored
Adding optional support for serialisation. (#346)
Adding optional support for serialisation.
1 parent 0a02fe6 commit 380ee0a

File tree

4 files changed

+56
-19
lines changed

4 files changed

+56
-19
lines changed

.github/workflows/aws-lambda-java-serialization.yml

+5-4
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ jobs:
2424
uses: actions/setup-java@v1
2525
with:
2626
java-version: 1.8
27-
27+
28+
# Package target module
29+
- name: Install serialization with Maven
30+
run: mvn -B install --file aws-lambda-java-serialization/pom.xml
2831
# Install base module
2932
- name: Install events with Maven
3033
run: mvn -B install --file aws-lambda-java-events/pom.xml
31-
# Package target module
32-
- name: Package serialization with Maven
33-
run: mvn -B package --file aws-lambda-java-serialization/pom.xml
34+

aws-lambda-java-serialization/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@
4949
<artifactId>jackson-datatype-jsr310</artifactId>
5050
<version>${jackson.jsr10.version}</version>
5151
</dependency>
52+
<dependency>
53+
<groupId>com.fasterxml.jackson.datatype</groupId>
54+
<artifactId>jackson-datatype-jdk8</artifactId>
55+
<version>${jackson.jsr10.version}</version>
56+
</dependency>
5257
<dependency>
5358
<groupId>com.google.code.gson</groupId>
5459
<artifactId>gson</artifactId>

aws-lambda-java-serialization/src/main/java/com/amazonaws/services/lambda/serialization/JacksonPojoSerializer.java

+3-9
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,22 @@
22

33
package com.amazonaws.services.lambda.serialization;
44

5-
import com.amazonaws.services.lambda.serialization.PojoSerializer;
6-
import com.amazonaws.services.lambda.serialization.CustomPojoSerializer;
75
import com.fasterxml.jackson.core.JsonFactory;
86
import com.fasterxml.jackson.core.JsonParser;
97
import com.fasterxml.jackson.core.JsonGenerator;
108
import com.fasterxml.jackson.annotation.JsonInclude.Include;
119
import com.fasterxml.jackson.core.json.JsonReadFeature;
1210
import com.fasterxml.jackson.core.json.JsonWriteFeature;
13-
import com.fasterxml.jackson.core.StreamWriteFeature;
14-
import com.fasterxml.jackson.core.StreamReadFeature;
1511
import com.fasterxml.jackson.databind.DeserializationConfig;
1612
import com.fasterxml.jackson.databind.DeserializationContext;
1713
import com.fasterxml.jackson.databind.DeserializationFeature;
18-
import com.fasterxml.jackson.databind.JavaType;
1914
import com.fasterxml.jackson.databind.JsonDeserializer;
2015
import com.fasterxml.jackson.databind.MapperFeature;
2116
import com.fasterxml.jackson.databind.ObjectMapper;
22-
import com.fasterxml.jackson.databind.ObjectReader;
23-
import com.fasterxml.jackson.databind.ObjectWriter;
2417
import com.fasterxml.jackson.databind.SerializationConfig;
2518
import com.fasterxml.jackson.databind.SerializationFeature;
2619
import com.fasterxml.jackson.databind.module.SimpleModule;
20+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
2721
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
2822

2923
import java.io.IOException;
@@ -126,8 +120,8 @@ private static ObjectMapper createObjectMapper() {
126120
module.addDeserializer(Void.class, new VoidDeserializer());
127121
mapper.registerModule(module);
128122

129-
JavaTimeModule javaTimeModule = new JavaTimeModule();
130-
mapper.registerModule(javaTimeModule);
123+
mapper.registerModule(new JavaTimeModule());
124+
mapper.registerModule(new Jdk8Module());
131125

132126
return mapper;
133127
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,53 @@
11
package com.amazonaws.services.lambda.serialization;
22

3-
import com.amazonaws.services.lambda.serialization.JacksonPojoSerializer;
4-
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
55
import org.junit.jupiter.api.Test;
6-
import org.junit.jupiter.api.Assertions;
6+
7+
import java.util.Optional;
8+
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
import static org.junit.jupiter.api.Assertions.assertNotNull;
711

812
public class JacksonPojoSerializerTest {
913

14+
private static final ObjectMapper MAPPER = JacksonPojoSerializer.getInstance().getMapper();
15+
1016
@Test
1117
public void deserializeVoidAsNonNull() throws Exception {
12-
JacksonPojoSerializer instance = JacksonPojoSerializer.getInstance();
13-
Void actual = instance.getMapper().readValue("{}", Void.class);
14-
Assertions.assertNotNull(actual);
18+
Void actual = MAPPER.readValue("{}", Void.class);
19+
assertNotNull(actual);
20+
}
21+
22+
@Test
23+
public void testOptionalAsEmpty() throws JsonProcessingException {
24+
Contact emptyEmail = new Contact("Example Co.", Optional.empty());
25+
String emptyEmailJson = MAPPER.writeValueAsString(emptyEmail);
26+
assertEquals("{\"name\":\"Example Co.\",\"email\":null}", emptyEmailJson);
27+
}
28+
29+
@Test
30+
public void testOptionalWithValue() throws JsonProcessingException {
31+
Contact withEmail = new Contact("Example Co.", Optional.of("[email protected]"));
32+
String withEmailJson = MAPPER.writeValueAsString(withEmail);
33+
assertEquals("{\"name\":\"Example Co.\",\"email\":\"[email protected]\"}", withEmailJson);
34+
}
35+
36+
static class Contact {
37+
private final String name;
38+
private final Optional<String> email;
39+
40+
public Contact(String name, Optional<String> email) {
41+
this.name = name;
42+
this.email = email;
43+
}
44+
45+
public String getName() {
46+
return name;
47+
}
48+
49+
public Optional<String> getEmail() {
50+
return email;
51+
}
1552
}
1653
}

0 commit comments

Comments
 (0)