SpringBoot jackson提供对LocalDate的支持方式
作者:myCat、 时间:2022-01-06 00:06:51
jackson提供对LocalDate的支持
SpringBoot默认使用jackson来进行json格式转换,我们在配置文件中加入如下配置可以统一的改变Spring MVC返回值的日期格式类型
spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=GMT+8
spring.jackson.serialization.write-dates-as-timestamps=false
但是这个配置对于java8新提供的日期APILocalDate、LocalDateTime等无效。
解决办法
引入依赖
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.9</version>
</dependency>
启动主类添加如下代码
@SpringBootApplication
public class GroupApplication {
public static void main(String[] args) {
SpringApplication.run(GroupApplication.class, args);
}
/**
* 提供jackson对LocalDate等java8提供的日期的序列化支持
*/
@Bean(name = "mapperObject")
public ObjectMapper getObjectMapper() {
ObjectMapper om = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
om.registerModule(javaTimeModule);
return om;
}
}
使用Jackson格式化LocalDate对象
LocalDate可以很方便的对日期进行处理,但是在返回给前端时,展示为如下的JSON结构:
{
"dayOfWeek": "FRIDAY",
"month": "JANUARY",
"year": 2020,
"dayOfMonth": 3,
"era": "CE",
"dayOfYear": 3,
"monthValue": 1,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
前端组件就很难处理了。接下来,我们需要将此属性反序列化并从JSON字符串序列化。为此,我们可以使用@JsonDeserialize和@JsonSerialize来注释该类的LocalDate属性,时期成为前端组件需要的String格式。
实现LocalDateDeserializer和LocalDateSerializer
下面是LocalDateSerializerand LocalDateDeserializer类的定义。
public class LocalDateDeserializer extends StdDeserializer<LocalDate> {
protected LocalDateDeserializer() {
super(LocalDate.class);
}
@Override
public LocalDate deserialize(JsonParser parser, DeserializationContext context) throws IOException {
return LocalDate.parse(parser.readValueAs(String.class));
}
}
public class LocalDateSerializer extends StdSerializer<LocalDate> {
public LocalDateSerializer() {
super(LocalDate.class);
}
@Override
public void serialize(LocalDate value, JsonGenerator generator, SerializerProvider provider) throws IOException {
generator.writeString(value.format(DateTimeFormatter.ISO_LOCAL_DATE));
}
}
实体类添加注解
实体类添加如下的注解
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate date;
来源:https://blog.csdn.net/WYA1993/article/details/86298545
标签:SpringBoot,jackson,LocalDate
0
投稿
猜你喜欢
Android ContentProvider查看/读取手机联系人实例
2021-10-13 07:10:13
详谈Enumeration接口和Iterator接口的区别
2023-05-08 02:25:23
深入探究Java线程的状态与生命周期
2021-10-01 17:44:10
Android自定义ViewGroup之WaterfallLayout(二)
2022-10-11 01:58:02
C#的静态工厂方法与构造函数相比有哪些优缺点
2022-08-29 21:11:45
深度解析Java中ArrayList的使用
2023-06-16 23:26:01
ios百度地图的使用(普通定位、反地理编码)
2023-07-03 15:26:17
Java获得当前时间前指定几个小时具体时间的方法示例
2023-11-24 04:56:49
Android开发中Activity的生命周期及加载模式详解
2021-07-28 02:33:44
Java web项目中的强制登录功能实现代码
2023-09-14 08:26:18
Android实现在子线程中更新Activity中UI的方法
2022-12-16 23:57:46
SpringBoot中的yaml语法及静态资源访问问题
2021-09-27 20:32:38
JAVA使用POI获取Excel的列数与行数
2021-10-03 12:53:37
Android ListView实现上拉加载下拉刷新和滑动删除功能
2021-09-24 19:08:04
Android中ActionBar以及menu的代码设置样式
2023-11-24 03:34:33
详解Java程序读取properties配置文件的方法
2022-03-09 17:26:23
c# 如何实现自动更新程序
2021-11-20 21:02:41
解决SpringCloud下spring-boot-maven-plugin插件的打包问题
2022-03-10 14:35:59
详解Spring Boot加载properties和yml配置文件
2023-11-24 07:14:09
Unity Shader实现裁切效果
2023-03-05 07:54:24