From 34961791ca6d802f7bb8055b16771c9d00057f67 Mon Sep 17 00:00:00 2001 From: hcong <1050828145@qq.com> Date: 星期二, 10 十二月 2024 10:51:42 +0800 Subject: [PATCH] 1. 新增后台任务状态类的自定义序列化类 (解决解决BgTaskStatus类中计算属性runTime无法序列化的问题)2. 新增LocalDateTime类型的时间格式序列化和反序列化类 (解决BgTaskStatus类中LocalDateTime类型无法序列化为正确的时间格式问题) --- src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt | 5 ++ src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java | 51 +++++++++++++++++++++++++ src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt | 6 ++ src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java | 30 +++++++++++++++ 4 files changed, 91 insertions(+), 1 deletions(-) diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt index 60bfcf4..93d036a 100644 --- a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt +++ b/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() // 杩愯鏃堕暱锛堢锛� diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatusJsonSerializer.java new file mode 100644 index 0000000..b3afd37 --- /dev/null +++ b/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绫荤殑鑷畾涔夊簭鍒楀寲绫� 瑙e喅浜嗚绠楀睘鎬ф棤娉曞簭鍒楀寲鐨勯棶棰� + * 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(); + // 搴忓垪鍖杢ype + jsonObject.addProperty("type", String.valueOf(bgTaskStatus.getType())); + // 搴忓垪鍖杋d + jsonObject.addProperty("id", bgTaskStatus.getId()); + // 搴忓垪鍖杗ame + jsonObject.addProperty("name", bgTaskStatus.getName()); + // 搴忓垪鍖杝tatus + jsonObject.addProperty("status", bgTaskStatus.getStatus().ordinal()); + // 搴忓垪鍖杝tartTime + jsonObject.addProperty("startTime", formatLocalDateTime(bgTaskStatus.getStartTime())); + // 搴忓垪鍖杄ndTime + jsonObject.addProperty("endTime", formatLocalDateTime(bgTaskStatus.getEndTime())); + // 搴忓垪鍖朿reateTime + jsonObject.addProperty("createTime", formatLocalDateTime(bgTaskStatus.getCreateTime())); + // 搴忓垪鍖� 璁$畻灞炴�unTime + jsonObject.addProperty("runTime", bgTaskStatus.getRunTime()); + // 搴忓垪鍖杄xtra + if (bgTaskStatus.getExtra() != null) { + jsonObject.add("extra", context.serialize(bgTaskStatus.getExtra())); + } + return jsonObject; + } + + private String formatLocalDateTime(LocalDateTime localDateTime) { + // 濡傛灉LocalDateTime涓簄ull锛屽垯杩斿洖null + if (localDateTime == null) { + return null; + } + // 鏍煎紡鍖朙ocalDateTime + return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime); + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt b/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt index f749e00..247b3a2 100644 --- a/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt +++ b/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() } \ No newline at end of file diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java b/src/main/kotlin/cn/flightfeather/supervision/socket/LocalDateTimeAdapter.java new file mode 100644 index 0000000..dedbf00 --- /dev/null +++ b/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); + } + } +} + -- Gitblit v1.9.3