在使用 Jackson 进行 JSON 反序列化时,如果需要将 JSON 中的日期时间字符串转换为 LocalDateTime 类型,并指定特定的格式,可以使用 @JsonFormat 注解。以下是具体的使用方法:


1. 添加依赖

确保你的项目中已经引入了 Jackson 依赖。如果使用 Maven,可以在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

jackson-datatype-jsr310 是 Jackson 对 Java 8 日期时间类型(如 LocalDateTime)的支持模块。


2. 在实体类中使用 @JsonFormat

在实体类的 LocalDateTime 字段上添加 @JsonFormat 注解,并指定日期时间的格式:

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;

public class Order {

    private String orderId;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 指定日期时间格式
    private LocalDateTime purchaseTime;

    // 省略其他字段、构造方法、getter 和 setter
}

3. 全局配置日期时间格式

如果你希望在整个应用中统一 LocalDateTime 的序列化和反序列化格式,可以在 application.propertiesapplication.yml 中配置 Jackson 的默认行为:

application.properties

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

application.yml

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

4. 自定义 ObjectMapper

如果需要更灵活地配置 Jackson 的行为,可以自定义 ObjectMapper 并注册 JavaTimeModule

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule()); // 注册 JavaTimeModule
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // 禁用时间戳格式
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); // 设置日期格式
        return objectMapper;
    }
}

5. 示例:完整代码

实体类

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;

public class Order {

    private String orderId;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime purchaseTime;

    // 省略其他字段、构造方法、getter 和 setter
}

控制器

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {

    @PostMapping("/order")
    public String createOrder(@RequestBody Order order) {
        return "Order created with purchase time: " + order.getPurchaseTime();
    }
}

测试 JSON

{
  "orderId": "12345",
  "purchaseTime": "2023-10-01 14:30:00"
}

6. 注意事项

  • @JsonFormat 注解可以同时用于序列化和反序列化。
  • 如果 JSON 中的日期时间格式与 @JsonFormat 指定的格式不匹配,Jackson 会抛出异常。
  • 如果需要处理时区问题,可以在 @JsonFormat 中指定 timezone 属性,例如:
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime purchaseTime;
    

通过以上方式,你可以轻松地在 Spring Boot 中使用 Jackson 反序列化 LocalDateTime 并指定日期时间格式。

posted @ 2025-01-07 16:48 java渣渣 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 背景 springboot2.2.x 升级到是springboot2.7.x,apollo-client也跟着升级到了2.0.1,配置中心使用.properties的应用启动正常, 使用.yml报了上面的错误 解决方案 版本降级到1.33解决 下面是ai回答的结果 让我们尝试几个可能的解决方案: 检 阅读全文
posted @ 2024-12-19 20:00 java渣渣 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 背景 有个网站开了代理,浏览器可以访问,但是命令行ping不通,telnet不通,python requests请求报上述错误 解决方案 配置代理,改成http请求 url = "http://m.zhibo8.com/news/web/zuqiu/2024-12-02/match1437755da 阅读全文
posted @ 2024-12-17 11:45 java渣渣 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 背景 使用openfeign和第三方接口进行联调时,接口出现上述异常 原因 第三方未按接口文档要求格式返回json格式,返回的请求头content-type是text/plain,导致无法解析返回请求。 解决方法 要求第三方按接口文档格式返回content-type是application/json 阅读全文
posted @ 2024-12-11 10:10 java渣渣 阅读(203) 评论(0) 推荐(0) 编辑
摘要: !pip install flask !pip install pyngrok import getpass import os import threading from flask import Flask from pyngrok import ngrok, conf print("Enter 阅读全文
posted @ 2024-12-06 11:18 java渣渣 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 背景 在另一台电脑安装最新版idea2024.3 然后将2022.2的settings文件导入了新版idea 解决方法删除 ctr+shift+alt+s sdks 删除无用的sdk 阅读全文
posted @ 2024-11-28 15:30 java渣渣 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 背景 window在重置电脑时有些应用数据并不会丢失,它会把应用数据备份放到C:\Windows.old 文件夹 解决方法 这样当一些应用数据丢失我们就可以在这里面找到丢失应用数据重新加载到应用。 举个例子重置后idea的配置信息就在下面文件 C:\Windows.old\Users\用户名\App 阅读全文
posted @ 2024-11-26 16:52 java渣渣 阅读(102) 评论(0) 推荐(0) 编辑
摘要: https://segmentfault.com/a/1190000044453423 阅读全文
posted @ 2024-11-21 17:05 java渣渣 阅读(1) 评论(0) 推荐(0) 编辑
摘要: https://blog.csdn.net/weixin_43888891/article/details/131142279 阅读全文
posted @ 2024-10-23 10:16 java渣渣 阅读(2) 评论(0) 推荐(0) 编辑
摘要: https://www.51cto.com/article/743438.html 阅读全文
posted @ 2024-10-18 17:38 java渣渣 阅读(5) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示