将项目中的所有 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;
}
我正在尝试将前端所有 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;
}