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 changeProperties(SerializationConfig config, BeanDescription description, List 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() { @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; } }