package com.battery.business.runtime;
|
|
import java.io.IOException;
|
import java.time.Instant;
|
import java.util.Date;
|
import java.util.List;
|
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.databind.BeanDescription;
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
import com.fasterxml.jackson.databind.SerializationConfig;
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
|
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
|
/** 只在自研业务响应边界统一时间为毫秒数,平台接口保持原有契约。 */
|
@Configuration
|
public class BatteryTimeJsonConfig
|
{
|
/** 注册业务时间序列化规则,覆盖继承的平台审计时间字段。 */
|
@Bean
|
public SimpleModule batteryTimeModule()
|
{
|
SimpleModule module = new SimpleModule("battery-millisecond-times");
|
module.setSerializerModifier(new BeanSerializerModifier()
|
{
|
@Override public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
|
BeanDescription description, List<BeanPropertyWriter> properties)
|
{
|
if (!description.getBeanClass().getName().startsWith("com.battery.business.")) return properties;
|
for (BeanPropertyWriter property : properties)
|
{
|
Class<?> type = property.getType().getRawClass();
|
if (Date.class.isAssignableFrom(type) || type == Instant.class)
|
property.assignSerializer(new JsonSerializer<Object>()
|
{
|
@Override public void serialize(Object value, JsonGenerator generator, SerializerProvider provider) throws IOException
|
{ generator.writeNumber(value instanceof Date date ? date.getTime() : ((Instant) value).toEpochMilli()); }
|
});
|
}
|
return properties;
|
}
|
});
|
return module;
|
}
|
}
|