SpringBoot jackson提供对LocalDate的支持方式

网友投稿 364 2022-08-31


SpringBoot jackson提供对LocalDate的支持方式

目录jackson提供对LocalDate的支持解决办法使用Jackson格式化LocalDate对象实现LocalDateDeserializer和LocalDateSerializer实体类添加注解

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等无效。

解决办法

引入依赖

com.fasterxml.jackson.datatype

jackson-datatype-jsr310

2.8.9

启动主类添加如下代码

@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 {

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 CGYmzAuTr{

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;


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python psutil模块系统监控详解
下一篇:python stmplib与email模块邮箱详解(python基础教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~