Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d087fea

Browse files
committedFeb 1, 2025·
Add serialize/deserialize for ZonedDateTime using JavaTimeModule
Signed-off-by: Matheus Cruz <[email protected]>
1 parent be5530f commit d087fea

File tree

3 files changed

+204
-146
lines changed

3 files changed

+204
-146
lines changed
 

‎sdk/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<artifactId>jackson-databind</artifactId>
4040
<version>2.15.1</version>
4141
</dependency>
42+
<dependency>
43+
<groupId>com.fasterxml.jackson.datatype</groupId>
44+
<artifactId>jackson-datatype-jsr310</artifactId>
45+
<version>2.15.1</version>
46+
</dependency>
4247
<dependency>
4348
<groupId>io.projectreactor</groupId>
4449
<artifactId>reactor-core</artifactId>

‎sdk/src/main/java/io/dapr/client/ObjectSerializer.java

+29-1
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,26 @@
1414
package io.dapr.client;
1515

1616
import com.fasterxml.jackson.annotation.JsonInclude;
17+
import com.fasterxml.jackson.core.JsonGenerator;
18+
import com.fasterxml.jackson.core.JsonParser;
19+
import com.fasterxml.jackson.databind.DeserializationContext;
1720
import com.fasterxml.jackson.databind.DeserializationFeature;
1821
import com.fasterxml.jackson.databind.JavaType;
22+
import com.fasterxml.jackson.databind.JsonDeserializer;
1923
import com.fasterxml.jackson.databind.JsonNode;
24+
import com.fasterxml.jackson.databind.JsonSerializer;
2025
import com.fasterxml.jackson.databind.ObjectMapper;
26+
import com.fasterxml.jackson.databind.SerializationFeature;
27+
import com.fasterxml.jackson.databind.SerializerProvider;
28+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
2129
import com.google.protobuf.MessageLite;
2230
import io.dapr.client.domain.CloudEvent;
2331
import io.dapr.utils.TypeRef;
2432

2533
import java.io.IOException;
2634
import java.lang.reflect.Method;
35+
import java.time.ZonedDateTime;
36+
import java.time.format.DateTimeFormatter;
2737

2838
/**
2939
* Serializes and deserializes an internal object.
@@ -35,6 +45,8 @@ public class ObjectSerializer {
3545
*/
3646
protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
3747
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
48+
.registerModule(new JavaTimeModule())
49+
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
3850
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
3951

4052
/**
@@ -149,7 +161,7 @@ private <T> T deserialize(byte[] content, JavaType javaType) throws IOException
149161
* @throws IOException In case content cannot be parsed.
150162
*/
151163
public JsonNode parseNode(byte[] content) throws IOException {
152-
return OBJECT_MAPPER.readTree(content);
164+
return OBJECT_MAPPER.readTree(content);
153165
}
154166

155167
/**
@@ -200,4 +212,20 @@ private static <T> T deserializePrimitives(byte[] content, JavaType javaType) th
200212

201213
return OBJECT_MAPPER.readValue(content, javaType);
202214
}
215+
216+
private static class ZonedDateTimeDeserializer extends JsonDeserializer<ZonedDateTime> {
217+
@Override
218+
public ZonedDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
219+
throws IOException {
220+
return ZonedDateTime.parse(jsonParser.getText());
221+
}
222+
}
223+
224+
private static class ZonedDateTimeSerializer extends JsonSerializer<ZonedDateTime> {
225+
@Override
226+
public void serialize(ZonedDateTime zonedDateTime, JsonGenerator jsonGenerator,
227+
SerializerProvider serializerProvider) throws IOException {
228+
jsonGenerator.writeString(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
229+
}
230+
}
203231
}

0 commit comments

Comments
 (0)
Please sign in to comment.