Jackson @JsonFormat 注解

news/2024/12/16 7:13:00/

1. 概述

Jackson 是一个著名的Java库,专门用于将Java对象转换为JSON格式以及从JSON反序列化回Java对象。有时,在这个转换过程中,可能需要自定义某些字段的格式,特别是日期和时间字段。在这种情况下,Jackson的@JsonFormat注解可以提供帮助。

@JsonFormat 注解概览

@JsonFormat注解用于指定日期、时间和数字字段在序列化和反序列化时应采用的格式。该注解提供了对这些格式的精细控制,确保JSON输出中此类字段表示的一致性。

2. 开发步骤

  1. 启动一个新的Maven项目。
  2. 添加必要的Jackson依赖项。
  3. 设计User类,并应用@JsonFormat注解进行日期格式化。
  4. 创建一个单独的类来实现序列化机制。
  5. 构建一个主类来展示序列化过程。

3. 创建Maven项目

创建简单Maven项目有几种方式:

  • 使用命令行界面创建简单的Maven项目
  • 使用Eclipse IDE创建简单的Maven项目
  • 使用IntelliJ IDEA创建简单的Maven项目

4. Maven依赖

打开pom.xml文件,并添加以下Jackson数据绑定依赖项:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.0</version>
</dependency>

5. 示例代码

以用户管理系统为例,我们来看具体实现:

// User.java
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;public class User {private String username;@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")private Date birthdate;// 标准构造函数、getter和setter...public User() {}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthdate() {return birthdate;}public void setBirthdate(Date birthdate) {this.birthdate = birthdate;}
}// JsonSerializer.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;public class JsonSerializer {public static String serializeToJson(Object object) throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();return mapper.writeValueAsString(object);}
}// MainClass.java
import java.util.Calendar;public class MainClass {public static void main(String[] args) {User user = new User();user.setUsername("bob");Calendar calendar = Calendar.getInstance();calendar.set(1990, Calendar.JANUARY, 1);user.setBirthdate(calendar.getTime());try {String json = JsonSerializer.serializeToJson(user);System.out.println(json);} catch (JsonProcessingException e) {e.printStackTrace();}}
}

输出:

json">{"username":"bob","birthdate":"01-01-1990"}

代码解释:

  • User类中,birthdate字段是Date类型,并使用了@JsonFormat注解来指定其在序列化期间所需的格式。这确保了结果JSON中的日期将以"dd-MM-yyyy"格式表示。
  • JsonSerializer类利用Jackson的ObjectMapper简化了序列化操作。
  • MainClass作为驱动类,创建了一个User实例,设置了它的属性,并调用序列化逻辑以生成格式化的JSON输出。

6. 结论

Jackson的@JsonFormat注解为开发者提供了精确格式化日期、时间和数字字段的灵活性,即使在处理复杂的数据类型时也能保证JSON输出的一致性和清晰度。通过这种方式,开发人员可以确保他们的应用程序生成的JSON数据符合预期格式,从而提高数据交换的可靠性。


http://www.ppmy.cn/news/1555527.html

相关文章

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …

数字化的两种“脑洞”:经营 vs. 管控

说起数字化&#xff0c;大家可能会想到各种高大上的词汇&#xff0c;比如大数据、人工智能、云计算等等。然而&#xff0c;数字化的目的其实有两种不同的思维&#xff1a;一种是以经营为目的的数字化&#xff0c;另一种是以管控为目的的数字化。那么这两种数字化有什么区别&…

Spring WebFlux 和 Reactor关系

Spring WebFlux 和 Reactor 是紧密相关的&#xff0c;Spring WebFlux 基于 Reactor 构建&#xff0c;两者共同推动了响应式编程在 Java 开发中的应用。以下是它们的具体关系和分工&#xff1a; 1. Reactor: 响应式编程核心库 Reactor 是一个响应式编程库&#xff0c;实现了Rea…

吉林大学机器学习复习

第一章、绪论&#xff1a; 相关概念&#xff1a; 训练集&#xff1b;评估函数&#xff08;目标函数、代价函数&#xff09;&#xff1b;梯度下降&#xff1b;机器学习算法的分类 机器学习是什么&#xff1a;寻找一个函数&#xff08;模型&#xff09;。 机器学习的基本流程&…

【HarmonyOS】鸿蒙应用实现手机摇一摇功能

【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能&#xff0c;是通过获取手机设备&#xff0c;加速度传感器接口&#xff0c;获取其中的数值&#xff0c;进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下&#xf…

系列4:基于Centos-8.6 Kubernetes多网卡节点Calico选择网卡配置

每日禅语 不动心”是一个人修养和定力的体现&#xff0c;若一个人心无定力&#xff0c;就会被外界环境左右&#xff0c;随外界的境遇而动摇。佛家认为&#xff0c;心是一切的基础&#xff0c;一个人如果想要真正入定&#xff0c;必须先从修心开始。修心即是净心&#xff0c;心灵…

Jenkins与SonarQube持续集成搭建及坑位详解

Jenkins和SonarQube都是软件开发过程中常用的工具,它们在代码管理、构建、测试和质量管理方面发挥着重要作用。以下是关于Jenkins与SonarQube的作用及整合步骤环境搭建的详细解释: 一、Jenkins与SonarQube的作用 Jenkins: Jenkins是一个开源的持续集成和交付工具,它可以帮…

niushop 在mac电脑上,pages.json异常, easycom不渲染

niushop 在mac电脑上,pages.json异常, easycom不渲染 由于使用了vscode的自动格式化工具,所以这里自动把-(\W.*)变成了-(W*),所以找不到对应的组件; mac下面应该用(\\W*) 找了两天,对比了两天; 发现是这个问题;太坑了;