JSON转LocalDate失败的问题解决方案

本文探讨了前端在处理LocalDate类型的JSON数据时遇到的问题,通过介绍使用DateTimeFormat和JsonFormat注解失败,以及如何通过序列化和反序列化指定为LocalDate类型来成功解决问题。
摘要由CSDN通过智能技术生成
今天前端汇报了一个传参问题,觉得很有意思,特此记录下来。下面是代码和报错。
实体类部分代码:
 /**
     * 出生年月
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate birth;

JSON的部分内容如下:

{
.....
"birth":"2021-10-19",
.....
}

调用接口后报错提示我无法将数据封装进LocalDate 内
在这里插入图片描述
查询后说是使用

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

这样的接口定义好pattern就可以
但是后来试验发现 这个注解针对于LocalDateTime类型是可以的 但是对于LocalDate 是不可以的
直到后面发现加上序列化和反序列化后

    /**
     * 出生年月
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate birth;

通过序列化(Serialize)和反序列化(Deserialize) 再指定类型是LocalDate(注意不是LocalDateTime)就可以了

Java中,将JSON字符串中的日期换为LocalDate对象可以通过使用Jackson库来实现。下面是两种方法: 方法一:使用@JsonFormat注解 ```java import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { String json = "{\"date\": \"2022-01-01\"}"; ObjectMapper objectMapper = new ObjectMapper(); MyObject myObject = objectMapper.readValue(json, MyObject.class); System.out.println(myObject.getDate()); // 输出:2022-01-01 } static class MyObject { @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate date; public LocalDate getDate() { return date; } public void setDate(LocalDate date) { this.date = date; } } } ``` 方法二:自定义反序列化器 ```java import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import java.io.IOException; import java.time.LocalDate; public class Main { public static void main(String[] args) throws Exception { String json = "{\"date\": \"2022-01-01\"}"; ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addDeserializer(LocalDate.class, new LocalDateDeserializer()); objectMapper.registerModule(module); MyObject myObject = objectMapper.readValue(json, MyObject.class); System.out.println(myObject.getDate()); // 输出:2022-01-01 } static class MyObject { private LocalDate date; public LocalDate getDate() { return date; } public void setDate(LocalDate date) { this.date = date; } } static class LocalDateDeserializer extends JsonDeserializer<LocalDate> { @Override public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String dateString = p.getText(); return LocalDate.parse(dateString); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值