首页 > 其他分享 >jacksonjson 反序列化localdatetime指定格式输出

jacksonjson 反序列化localdatetime指定格式输出

时间:2025-01-07 16:56:32浏览次数:8  
标签:JsonFormat jackson jacksonjson 格式 LocalDateTime localdatetime import 序列化

在使用 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 并指定日期时间格式。

标签:JsonFormat,jackson,jacksonjson,格式,LocalDateTime,localdatetime,import,序列化
From: https://www.cnblogs.com/lijiale/p/18657945

相关文章

  • 【语法】序列化与反序列化
    详解Python中的序列化(简单易懂版)_python序列化-CSDN博客python序列化与反序列化_python序列化和反序列化-CSDN博客【背景】序列号是一个将数据结构或对象状态转换为可存储或传输的格式(如JSON、XML、二进制等)的过程。反序列化(Deserialization)则是这个过程的逆操作,即将存储或传......
  • 【剑指Offer刷题系列】序列化与反序列化二叉树
    目录问题描述示例示例1:示例2:示例3:示例4:提示思路解析核心思路:具体步骤:复杂度分析:代码实现Python实现测试代码复杂度分析时间复杂度空间复杂度问题描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内......
  • Web安全基础:反序列化漏洞详解(含PHP,Python示例)
    当系统接收和处理外部输入的数据时,可能会通过反序列化过程执行恶意代码或操作。这个漏洞的根本原因在于,系统对反序列化数据的处理不够严格,导致攻击者能够将精心构造的数据注入到反序列化流程中,进而达到远程代码执行、数据篡改、权限提升等目的。序列化与反序列化序列化:将......
  • 01java反序列化基础
    java反射的相关操作一些重要的方法获取类的⽅法:forName实例化类对象的⽅法:newInstance获取函数的⽅法:getMethod执⾏函数的⽅法:invoke//eg.反射获取任意类的任意方法并执行importjava.lang.reflect.Method;publicclassReflectionExample{publics......
  • c# 元组序列化
        在C#中,可以使用System.Text.Json或Newtonsoft.Json库来对元组进行序列化。以下是使用这两个库进行元组序列化的示例代码。使用System.Text.Json:  usingSystem;usingSystem.Text.Json; vartuple=(Name:"John",Age:30);stringjson......
  • dubbo 序列化-kryo
    dubbo序列化-kryo在dubbo中给我们提供了多种的序列化的方式fastjson2,hessian2kryofstdubbo(dubbo官方自己的,目前没有稳定版本不推荐使用)protobuf这些都是目前比较主流的序列化方案,其中kryo的序列化效果是比较明显的相对于hessian2,如果使用的是异构语言的话可以......
  • 反序列化【个人学习笔记】
    改文章仅为学习过程中的笔记,如有侵权,请联系本文作者删除,谢谢......
  • 基于 Go 语言的结构体序列化与反序列化实现
    背景在软件开发中,序列化和反序列化是常见的操作,尤其是在网络通信、数据存储以及分布式系统中。序列化是指将数据结构或对象转化为字节流的过程,而反序列化则是将字节流还原为原始的数据结构或对象。通过这种方式,可以方便地在不同的系统或组件之间传输和存储数据。在Go语言中,虽......
  • .NET 9 New features-JSON序列化
    .NET9已经发布有一段时间了,近期整理一下.NET9的新特性,今天重点分享.NET9JSON序列化方面的改进。先引用官方的说明:在 System.Text.Json 中,.NET9提供了用于序列化JSON的新选项和新的单一实例,可以更轻松地使用Web默认值进行序列化。举个实际的例子,缩进选项JsonSer......
  • fastjson 序列化踩坑
    坑1:包含转义符的子对象反序列化场景这样一个json字符串[{"value":"定位标志:0,GPS:9,POWER:1,GSM:15","name":"positionType","metadata":"{\"timestamp\":1735119664668}"}]这个json字符串是如何产生的?met......