程序中使用LocalDateTime类型, 在api返回response时,LocalDateTime类型的数据返回的格式是数组形式,非常不便于展示和解析。 原有的通过修改application.yaml方式也行不通,因为使用的是LocalDateTime, 不是DateTime类型。
备注:如下方式对LocalDateTime 类型字段不起作用。
在application .yaml增加如下内容不生效
spring:
jackson:
default-property-inclusion: non_null
date-format: yyyyMMdd HH:mm:ss
time-zone: GMT+8
先直接贴上在本人程序中生效的方法
增加一个时间解析类本人程序中只使用了LocalDateTime类
@Configuration
public class DateFormatConfig {
@Value("${spring.jackson.date-format:yyyyMMdd HH:mm:ss}")
private String pattern;
@Bean
@Primary
public ObjectMapper serializingObjectMapper() {
// 备注这里新生成来一个ObjectMapper对象,在本人的实际程序中不是在这里生成ObjectMapper ,是在原有project的common module中修改了已有ObjectMapper bean
//这里为了展示方便,直接在新类中生成
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.format(DateTimeFormatter.ofPattern(pattern)));
}
}
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException {
return LocalDateTime.parse(p.getValueAsString(), DateTimeFormatter.ofPattern(pattern));
}
}
}
在使用LocalDateTime的类定义上直接添加类似这样注解也可以,但是这种方式不是全局配置,并且需要修改多处,不建议使用
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime lastUpdate;
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
这种方式导致显示效果为
“timestamp”: “2022-11-12T15:42:38.836428”,
https://www.baeldung.com/spring-boot-formatting-json-dates
https://stackoverflow.com/questions/73762782/in-spring-boot-the-jackson-with-localdatetime-serialization-error