f = f(pje.getMessage());
+ f.setCode(pje.getCode());
+ return f;
+ }
+
+}
diff --git a/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java b/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java
index 03e1dc6be..5cd905193 100644
--- a/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java
+++ b/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java
@@ -8,6 +8,11 @@
/**
* The result object returned by the request
+ *
+ * 低版本由于 Jackson 序列化配置问题,导致无法在此对象上新增任何字段了,否则会报错 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "code" (class tech.powerjob.common.response.ObjectResultDTO), not marked as ignorable (3 known properties: "data", "success", "message"])
+ * at [Source: (String)"{"success":true,"code":null,"data":2,"message":null}"; line: 1, column: 28] (through reference chain: tech.powerjob.common.response.ObjectResultDTO["code"])
+ *
+ * 短期内所有的新增字段需求,都通过新对象继承实现
*
* @author tjq
* @since 2020/3/30
@@ -17,9 +22,9 @@
@ToString
public class ResultDTO implements PowerSerializable {
- private boolean success;
- private T data;
- private String message;
+ protected boolean success;
+ protected T data;
+ protected String message;
public static ResultDTO success(T data) {
ResultDTO r = new ResultDTO<>();
diff --git a/powerjob-common/src/main/java/tech/powerjob/common/serialize/JsonUtils.java b/powerjob-common/src/main/java/tech/powerjob/common/serialize/JsonUtils.java
index 0480357a9..7f280bde6 100644
--- a/powerjob-common/src/main/java/tech/powerjob/common/serialize/JsonUtils.java
+++ b/powerjob-common/src/main/java/tech/powerjob/common/serialize/JsonUtils.java
@@ -1,8 +1,9 @@
package tech.powerjob.common.serialize;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.json.JsonMapper;
import lombok.extern.slf4j.Slf4j;
@@ -28,8 +29,20 @@ public class JsonUtils {
.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true)
.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)
.configure(JsonParser.Feature.IGNORE_UNDEFINED, true)
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.build();
+ static {
+ JSON_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+ // 非核心功能可降级,尽可能降低依赖冲突概率
+ try {
+ JSON_MAPPER.registerModule(new com.fasterxml.jackson.datatype.jsr310.JavaTimeModule());
+ } catch (Exception e) {
+ log.warn("[JsonUtils] registerJavaTimeModule failed, PowerJob can't process Java 8 date/time type now!", e);
+ }
+ }
+
private static final TypeReference