目录
解决:
1、注册日期序列化器
2、自定义LocalDateTime的JSON格式
3、使用第三方库
总结:
实体类中定义了LocalDateTime类型的属性,获取数据会出现以下日期格式问题:
讲述:
对于LocalDateTime的JSON序列化和反序列化,需要注意它的JSON格式化问题。
LocalDateTime默认的JSON格式LocalDateTime默认序列化为ISO8601格式的字符串,如:"2023-07-25T12:00:00"。
这种格式不太人性化,而且不同的JSON库会有格式差异。
解决:
1、注册日期序列化器
为确保全局格式一致,可以注册自定义的LocalDateTime序列化器: (配置类)
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Configuration
public class LocalDateTimeSerializerConfig {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
public LocalDateTimeSerializer localDateTimeDeserializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
}
此时再去获取数据,格式就好了。
上面的方案全局生效,当全局的格式化方式无法满足我们需求时,我们对日期格式要做特殊的处理:在类的属性上添加注解。
2、自定义LocalDateTime的JSON格式
可以通过@JsonFormat注解自定义格式:
注意:这种方式只针对单个的数据类型,而非全局,每一个都需要注解去格式化日期。(比较麻烦)
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime createTime;
常用的格式化pattern包括:
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd
- HH:mm:ss
3、使用第三方库
可以使用像jackson-datatype-jsr310这样的库,提供了自动格式化的LocalDateTime序列化器。
总结:
通过添加@JsonFormat注解或者自定义序列化器,可以解决LocalDateTime的JSON序列化问题,避免格式不统一的问题。