|
19 | 19 | import org.apache.dubbo.common.extension.Activate;
|
20 | 20 |
|
21 | 21 | import java.lang.reflect.Type;
|
| 22 | +import java.util.ArrayList; |
22 | 23 | import java.util.List;
|
23 | 24 |
|
24 | 25 | import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
25 | 26 | import com.fasterxml.jackson.core.JsonProcessingException;
|
26 | 27 | import com.fasterxml.jackson.databind.DeserializationFeature;
|
27 | 28 | import com.fasterxml.jackson.databind.JsonNode;
|
28 | 29 | import com.fasterxml.jackson.databind.MapperFeature;
|
| 30 | +import com.fasterxml.jackson.databind.Module; |
29 | 31 | import com.fasterxml.jackson.databind.json.JsonMapper;
|
30 | 32 | import com.fasterxml.jackson.databind.json.JsonMapper.Builder;
|
31 | 33 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
34 | 36 | public class JacksonImpl extends AbstractJsonUtilImpl {
|
35 | 37 |
|
36 | 38 | private volatile JsonMapper mapper;
|
| 39 | + private final List<Module> customModules = new ArrayList<>(); |
37 | 40 |
|
38 | 41 | @Override
|
39 | 42 | public String getName() {
|
@@ -113,10 +116,24 @@ protected JsonMapper getMapper() {
|
113 | 116 | }
|
114 | 117 |
|
115 | 118 | protected Builder createBuilder() {
|
116 |
| - return JsonMapper.builder() |
| 119 | + Builder builder = JsonMapper.builder() |
117 | 120 | .configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true)
|
118 | 121 | .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
119 | 122 | .serializationInclusion(Include.NON_NULL)
|
120 | 123 | .addModule(new JavaTimeModule());
|
| 124 | + |
| 125 | + for (Module module : customModules) { |
| 126 | + builder.addModule(module); |
| 127 | + } |
| 128 | + |
| 129 | + return builder; |
| 130 | + } |
| 131 | + |
| 132 | + public void addModule(Module module) { |
| 133 | + synchronized (this) { |
| 134 | + customModules.add(module); |
| 135 | + // Invalidate the mapper to rebuild it |
| 136 | + this.mapper = null; |
| 137 | + } |
121 | 138 | }
|
122 | 139 | }
|
0 commit comments