Skip to content

Commit 1efe2e7

Browse files
authored
Merge pull request #1019 from wunai-pl/patch-2
增加对LocalDateTime类型格式化不生效问题
2 parents 2769f77 + cc3ea86 commit 1efe2e7

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package cn.iocoder.yudao.framework.common.util.json.databind;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
34
import com.fasterxml.jackson.core.JsonGenerator;
45
import com.fasterxml.jackson.databind.JsonSerializer;
56
import com.fasterxml.jackson.databind.SerializerProvider;
7+
import org.apache.commons.lang3.reflect.FieldUtils;
68

79
import java.io.IOException;
10+
import java.lang.reflect.Field;
811
import java.time.LocalDateTime;
912
import java.time.ZoneId;
13+
import java.time.format.DateTimeFormatter;
1014

1115
/**
1216
* 基于时间戳的 LocalDateTime 序列化器
@@ -19,8 +23,18 @@ public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTi
1923

2024
@Override
2125
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
22-
// 将 LocalDateTime 对象,转换为 Long 时间戳
23-
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
26+
String fieldName = gen.getOutputContext().getCurrentName();
27+
Class<?> clazz = gen.getOutputContext().getCurrentValue().getClass();
28+
Field field = FieldUtils.getField(clazz, fieldName, true);
29+
JsonFormat[] jsonFormats = field.getAnnotationsByType(JsonFormat.class);
30+
if(jsonFormats.length > 0){
31+
String pattern = jsonFormats[0].pattern();
32+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
33+
gen.writeString(formatter.format(value));
34+
}else{
35+
// 将 LocalDateTime 对象,转换为 Long 时间戳
36+
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
37+
}
2438
}
2539

2640
}

0 commit comments

Comments
 (0)