yeg
2026-09-09 9e332b9ea5f0866cf7ac03db5736d10469e5ed4a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
    }
}