1. 新增后台任务状态类的自定义序列化类 (解决解决BgTaskStatus类中计算属性runTime无法序列化的问题)2. 新增LocalDateTime类型的时间格式序列化和反序列化类 (解决BgTaskStatus类中LocalDateTime类型无法序列化为正确的时间格式问题)
已修改2个文件
已添加2个文件
92 ■■■■■ 文件已修改
src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt
@@ -1,5 +1,7 @@
package cn.flightfeather.supervision.common.executor
import cn.flightfeather.supervision.socket.LocalDateTimeAdapter
import com.google.gson.annotations.JsonAdapter
import java.time.Duration
import java.time.LocalDateTime
@@ -15,12 +17,15 @@
    var status: TaskStatus = TaskStatus.WAITING
    //    å¼€å§‹æ—¶é—´
    @JsonAdapter(LocalDateTimeAdapter::class)
    var startTime: LocalDateTime? = null
    //    ç»“束时间
    @JsonAdapter(LocalDateTimeAdapter::class)
    var endTime: LocalDateTime? = null
    //    åˆ›å»ºæ—¶é—´
    @JsonAdapter(LocalDateTimeAdapter::class)
    var createTime: LocalDateTime = LocalDateTime.now()
    //    è¿è¡Œæ—¶é•¿ï¼ˆç§’)
src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package cn.flightfeather.supervision.common.executor;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * BgTaskStatus类的自定义序列化类 è§£å†³äº†è®¡ç®—属性无法序列化的问题
 * by hc 2024.12.10
 */
public class BgTaskStatusJsonSerializer implements JsonSerializer<BgTaskStatus> {
    @Override
    public JsonElement serialize(BgTaskStatus bgTaskStatus, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        // åºåˆ—化type
        jsonObject.addProperty("type", String.valueOf(bgTaskStatus.getType()));
        // åºåˆ—化id
        jsonObject.addProperty("id", bgTaskStatus.getId());
        // åºåˆ—化name
        jsonObject.addProperty("name", bgTaskStatus.getName());
        // åºåˆ—化status
        jsonObject.addProperty("status", bgTaskStatus.getStatus().ordinal());
        // åºåˆ—化startTime
        jsonObject.addProperty("startTime", formatLocalDateTime(bgTaskStatus.getStartTime()));
        // åºåˆ—化endTime
        jsonObject.addProperty("endTime", formatLocalDateTime(bgTaskStatus.getEndTime()));
        // åºåˆ—化createTime
        jsonObject.addProperty("createTime", formatLocalDateTime(bgTaskStatus.getCreateTime()));
        // åºåˆ—化 è®¡ç®—属性runTime
        jsonObject.addProperty("runTime", bgTaskStatus.getRunTime());
        // åºåˆ—化extra
        if (bgTaskStatus.getExtra() != null) {
            jsonObject.add("extra", context.serialize(bgTaskStatus.getExtra()));
        }
        return jsonObject;
    }
    private String formatLocalDateTime(LocalDateTime localDateTime) {
        // å¦‚æžœLocalDateTime为null,则返回null
        if (localDateTime == null) {
            return null;
        }
        // æ ¼å¼åŒ–LocalDateTime
        return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime);
    }
}
src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt
@@ -1,9 +1,13 @@
package cn.flightfeather.supervision.common.utils
import cn.flightfeather.supervision.common.executor.BgTaskStatus
import cn.flightfeather.supervision.common.executor.BgTaskStatusJsonSerializer
import com.google.gson.Gson
import com.google.gson.GsonBuilder
object JsonUtil {
    val gson: Gson = GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()
    val gson: Gson = GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")
        .registerTypeAdapter(BgTaskStatus::class.java, BgTaskStatusJsonSerializer())
        .create()
}
src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package cn.flightfeather.supervision.socket;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * LocalDateTime类型的时间格式序列化和反序列化类
 * by hc 2024.12.6
 */
public class LocalDateTimeAdapter implements JsonDeserializer<LocalDateTime>, JsonSerializer<LocalDateTime> {
    private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    @Override
    public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(dateTimeFormatter.format(src));
    }
    @Override
    public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        try {
            return LocalDateTime.parse(json.getAsString(), dateTimeFormatter);
        } catch (Exception e) {
            throw new JsonParseException(e);
        }
    }
}