This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new 4a3e758b96 support jackson custom module. (#14817)
4a3e758b96 is described below
commit 4a3e758b96745833989eadca79af126349a766fd
Author: heliang666s <[email protected]>
AuthorDate: Fri Oct 25 16:57:47 2024 +0800
support jackson custom module. (#14817)
---
.../apache/dubbo/common/json/impl/JacksonImpl.java | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/json/impl/JacksonImpl.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/json/impl/JacksonImpl.java
index 449d0c0d83..d58a6ef64c 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/json/impl/JacksonImpl.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/json/impl/JacksonImpl.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.common.json.impl;
import org.apache.dubbo.common.extension.Activate;
import java.lang.reflect.Type;
+import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
@@ -26,6 +27,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.json.JsonMapper.Builder;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
@@ -34,6 +36,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
public class JacksonImpl extends AbstractJsonUtilImpl {
private volatile JsonMapper mapper;
+ private final List<Module> customModules = new ArrayList<>();
@Override
public String getName() {
@@ -113,10 +116,24 @@ public class JacksonImpl extends AbstractJsonUtilImpl {
}
protected Builder createBuilder() {
- return JsonMapper.builder()
+ Builder builder = JsonMapper.builder()
.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false)
.serializationInclusion(Include.NON_NULL)
.addModule(new JavaTimeModule());
+
+ for (Module module : customModules) {
+ builder.addModule(module);
+ }
+
+ return builder;
+ }
+
+ public void addModule(Module module) {
+ synchronized (this) {
+ customModules.add(module);
+ // Invalidate the mapper to rebuild it
+ this.mapper = null;
+ }
}
}