将项目中的所有 Instant 字段序列化为仅秒值

Serialize all Instant fields through the project to only seconds value

我正在尝试将前端所有 dto 中的所有 Instant 字段序列化为秒值(不是毫秒或 seconds.nanoseconds)。我正在使用 Spring Boot 并且我的 ObjectMapper bean 包含下一行

.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS)

所以,现在 Instant 字段以毫秒为单位进入前端。如果我删除上面的“禁用”行,字段开始看起来像这样

1605768411.538675

当然我可以创建自己的 StdSerializer 并将下一个注释添加到所有 Instant 字段

@JsonSerialize(using = MyCustomStdSerializedClass.class)

但我想找到一个解决方案,我将在一个地方添加它,它会影响所有 Instant 字段。 有什么想法吗?

UPD

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import java.io.IOException;
import java.time.Instant;

public class CustomInstantSerializer extends StdSerializer<Instant> {

public CustomInstantSerializer() {
    this(null);
}

public CustomInstantSerializer(Class<Instant> t) {
    super(t);
}

@Override
public void serialize(Instant value, JsonGenerator gen, SerializerProvider provider) throws IOException {
    gen.writeNumber(value.getEpochSecond());
}
}

您可以使用 SimpleModule 注册您的自定义序列化程序:

@Bean
public ObjectMapper objectMapper() {
   ObjectMapper mapper = new ObjectMapper();
   SimpleModule module = new SimpleModule();
   module.addSerializer(Instant.class, new MyCustomSerializer());
   mapper.registerModule(module);
   return mapper;
}