فهرست منبع

improvement: 解决localdatetime使用gson格式化显示异常

ChenSiTong 6 سال پیش
والد
کامیت
61de83b9fe

+ 1 - 1
src/main/java/nju/seec/helper/controller/websocket/CommentWebsocket.java

@@ -19,7 +19,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
 /**
  * @author cst
  */
-@ServerEndpoint("/api/websocket/comment/slide/{slideId}")
+@ServerEndpoint("/api/ws/comment/slide/{slideId}")
 @RestController
 @Slf4j
 @EqualsAndHashCode

+ 8 - 2
src/main/java/nju/seec/helper/util/JsonUtils.java

@@ -1,18 +1,24 @@
 package nju.seec.helper.util;
 
 import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import lombok.experimental.UtilityClass;
+import nju.seec.helper.util.serializer.LocalDateTimeSerializer;
+
+import java.time.LocalDateTime;
 
 /**
  * @author cst
  */
 @UtilityClass
 public class JsonUtils {
+    private static final Gson GSON = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()).create();
+
     public String toJson(Object o) {
-        return new Gson().toJson(o);
+        return GSON.toJson(o);
     }
 
     public <T> T fromJson(String json, Class<T> classOfT) {
-        return new Gson().fromJson(json, classOfT);
+        return GSON.fromJson(json, classOfT);
     }
 }

+ 21 - 0
src/main/java/nju/seec/helper/util/serializer/LocalDateTimeSerializer.java

@@ -0,0 +1,21 @@
+package nju.seec.helper.util.serializer;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @author cst
+ */
+public class LocalDateTimeSerializer implements JsonSerializer<LocalDateTime> {
+
+    @Override
+    public JsonElement serialize(LocalDateTime localDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
+        return new JsonPrimitive(localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
+    }
+}