增加对LocalDateTime类型格式化不生效问题

优化Field获取方式
This commit is contained in:
wunai-pl 2025-11-20 11:48:47 +08:00 committed by GitHub
parent 2769f774a0
commit cc3ea86419
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,12 +1,16 @@
package cn.iocoder.yudao.framework.common.util.json.databind;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.apache.commons.lang3.reflect.FieldUtils;
import java.io.IOException;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
/**
* 基于时间戳的 LocalDateTime 序列化器
@ -19,8 +23,18 @@ public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTi
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// LocalDateTime 对象转换为 Long 时间戳
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
String fieldName = gen.getOutputContext().getCurrentName();
Class<?> clazz = gen.getOutputContext().getCurrentValue().getClass();
Field field = FieldUtils.getField(clazz, fieldName, true);
JsonFormat[] jsonFormats = field.getAnnotationsByType(JsonFormat.class);
if(jsonFormats.length > 0){
String pattern = jsonFormats[0].pattern();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
gen.writeString(formatter.format(value));
}else{
// LocalDateTime 对象转换为 Long 时间戳
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
}
}
}