|
|
@@ -3,7 +3,15 @@ package com.etotem.cfc.entity;
|
|
|
import com.baomidou.mybatisplus.annotation.IdType;
|
|
|
import com.baomidou.mybatisplus.annotation.TableId;
|
|
|
import com.baomidou.mybatisplus.annotation.TableName;
|
|
|
+import com.fasterxml.jackson.annotation.JsonFormat;
|
|
|
+import com.fasterxml.jackson.core.JsonParser;
|
|
|
+import com.fasterxml.jackson.databind.DeserializationContext;
|
|
|
+import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
|
+import com.fasterxml.jackson.databind.JsonMappingException;
|
|
|
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
|
|
import lombok.Data;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
import java.io.Serializable;
|
|
|
import java.util.Date;
|
|
|
|
|
|
@@ -14,7 +22,11 @@ public class HealthSleepRecord implements Serializable {
|
|
|
private Long id;
|
|
|
private Long memberId;
|
|
|
private Long checkinId;
|
|
|
+ @JsonFormat(pattern = "HH:mm")
|
|
|
+ @JsonDeserialize(using = HealthSleepRecord.SleepTimeDeserializer.class)
|
|
|
private Date sleepTime;
|
|
|
+ @JsonFormat(pattern = "HH:mm")
|
|
|
+ @JsonDeserialize(using = HealthSleepRecord.SleepTimeDeserializer.class)
|
|
|
private Date wakeTime;
|
|
|
private Integer durationMinutes;
|
|
|
private Integer deepSleepMinutes;
|
|
|
@@ -24,4 +36,28 @@ public class HealthSleepRecord implements Serializable {
|
|
|
private Integer dreamCount;
|
|
|
private String remark;
|
|
|
private Date createdAt;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 前端时间选择器传 "HH:mm"(如 21:00),而 JDK 8+ 的 java.sql.Time.valueOf 只接受
|
|
|
+ * "HH:mm:ss" 三段格式;Jackson 2.13 对 java.sql.Time 的 @JsonFormat 反序列化不生效
|
|
|
+ * (String 工厂路径直接调 Time.valueOf),因此自定义解析并补秒。
|
|
|
+ */
|
|
|
+ public static class SleepTimeDeserializer extends JsonDeserializer<Date> {
|
|
|
+ @Override
|
|
|
+ public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
|
|
+ String v = p.getValueAsString();
|
|
|
+ if (v == null || v.trim().isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ v = v.trim();
|
|
|
+ if (v.length() == 5 && v.charAt(2) == ':') {
|
|
|
+ v = v + ":00";
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return java.sql.Time.valueOf(v);
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ throw new JsonMappingException(p, "睡眠时间字段格式错误,期望 HH:mm 或 HH:mm:ss,收到: " + v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|