【Spring Boot编程】Spring Boot中使用ObjectMapper处理JSON数据

news/2025/1/19 15:04:25/文章来源:https://www.cnblogs.com/o-O-oO/p/18679113

本指南探讨了如何在Spring Boot应用程序中使用ObjectMapper将Java对象转换为JSON,以及将JSON转换回Java对象。它涵盖了关键用例,例如自定义JSON字段名称、处理未知属性、处理列表,以及为特殊场景(如日期格式和美化打印)配置ObjectMapper。

ObjectMapper是Spring Boot中的一个关键组件,用于将Java对象序列化为JSON,并将JSON反序列化为Java对象。
以下是一些常见的ObjectMapper用例及代码示例:

1. 基本对象到JSON的转换

此用例涉及将Java对象转换为JSON。

import com.fasterxml.jackson.databind.ObjectMapper;public class ObjectToJsonExample {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();Employee employee = new Employee(1, "John", "Developer");// 将对象转换为JSONString jsonString = objectMapper.writeValueAsString(employee);System.out.println(jsonString);}
}

2. 基本JSON到对象的转换

此用例演示了将JSON字符串反序列化为Java对象。

import com.fasterxml.jackson.databind.ObjectMapper;public class JsonToObjectExample {public static void main(String[] args) throws Exception {String jsonString = "{\"id\":1,\"name\":\"John\",\"designation\":\"Developer\"}";ObjectMapper objectMapper = new ObjectMapper();// 将JSON字符串转换为Java对象Employee employee = objectMapper.readValue(jsonString, Employee.class);System.out.println(employee.getName());  // 输出: John}
}

3. 使用注解自定义JSON字段名称

在某些情况下,Java对象中的字段名称可能与JSON中的字段名称不匹配。使用@JsonProperty来处理此问题。

import com.fasterxml.jackson.annotation.JsonProperty;public class Employee {private int id;@JsonProperty("full_name")private String name;private String designation;// 构造函数、getter、setter
}

JSON:

{"id": 1,"full_name": "John","designation": "Developer"
}

4. 序列化时忽略字段

在将对象转换为JSON时,可能需要忽略某些字段。使用@JsonIgnore来跳过这些字段。

import com.fasterxml.jackson.annotation.JsonIgnore;public class Employee {private int id;private String name;@JsonIgnoreprivate String password;  // 序列化时将忽略此字段// 构造函数、getter、setter
}

5. 处理未知的JSON字段

在反序列化时,JSON中可能存在Java对象中不存在的字段。使用@JsonIgnoreProperties(ignoreUnknown = true)来避免因未知字段而导致的错误。

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;@JsonIgnoreProperties(ignoreUnknown = true)
public class Employee {private int id;private String name;private String designation;// 构造函数、getter、setter
}

6. 将对象列表转换为JSON

您可以使用ObjectMapper轻松地序列化和反序列化对象列表。

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.Arrays;
import java.util.List;public class ListToJsonExample {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();List<Employee> employees = Arrays.asList(new Employee(1, "John", "Developer"),new Employee(2, "Jane", "Tester"));// 将列表转换为JSONString jsonString = objectMapper.writeValueAsString(employees);System.out.println(jsonString);// 将JSON转换回列表List<Employee> employeeList = objectMapper.readValue(jsonString, new TypeReference<List<Employee>>() {});System.out.println(employeeList.get(0).getName());  // 输出: John}
}

7. 在Spring Boot控制器中使用ObjectMapper

在Spring Boot中,ObjectMapper可以用于REST API中处理JSON输入和输出。

@RestController
@RequestMapping("/employees")
public class EmployeeController {@Autowiredprivate ObjectMapper objectMapper;@PostMapping("/create")public String createEmployee(@RequestBody String employeeJson) throws Exception {Employee employee = objectMapper.readValue(employeeJson, Employee.class);return "Employee created: " + employee.getName();}@GetMapping("/get")public String getEmployee() throws Exception {Employee employee = new Employee(1, "John", "Developer");return objectMapper.writeValueAsString(employee);}
}

8. 将JSON文件转换为对象

您可以直接将JSON文件反序列化为Java对象。

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;public class JsonFileToObjectExample {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();// 从文件中读取JSON并转换为Employee对象Employee employee = objectMapper.readValue(new File("employee.json"), Employee.class);System.out.println(employee.getName());}
}

9. 美化打印JSON输出

使用writerWithDefaultPrettyPrinter()来美化打印JSON输出,以提高可读性。

public class PrettyPrintJsonExample {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();Employee employee = new Employee(1, "John", "Developer");// 将对象转换为美化后的JSONString prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(employee);System.out.println(prettyJson);}
}

10. 自定义ObjectMapper配置

您可以根据特定需求配置ObjectMapper,例如处理空值、日期格式等。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;public class CustomObjectMapperExample {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();// 注册Java 8时间模块以处理日期/时间objectMapper.registerModule(new JavaTimeModule());// 禁用日期的时间戳格式objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);// 转换带有LocalDate字段的Employee对象Employee employee = new Employee(1, "John", LocalDate.now());String jsonString = objectMapper.writeValueAsString(employee);System.out.println(jsonString);}
}

欢迎关注 SpringForAll社区(spring4all.com),专注分享关于Spring的一切!关注公众号:SpringForAll社区,回复“加群”还可加入Spring技术交流群!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/871711.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter通过JSON提取器获取任意一行数据中的多个字段

存在如下响应信息: { "result": { "data": [ { "字段1": "DK-01", "字段2": null, "字段3": "210(3mm/40kg)",}, {&q…

Windows7 64位系统ODBC数据源配置方法

Windows7 64位系统ODBC数据源配置方法 注意以下所说的步骤是在安装好SQL2000或者端内有绿色SQL的情况下,已经在查询分析器内一键建立并还原好数据库之后才进行的,请不要跳步骤进行,否则会出错。一键端可直接操作。(win7系统架设传奇3前请将UAC账户权限调至最低) Windows7…

【clang-format】Windows11下代码格式化工具clang-format.exe下载

官方项目地址:https://github.com/llvm/llvm-project/releases下滑找到win64.exe下载慢的可以去这个github代下网站:https://d.serctl.com/下载好后不用安装,直接解压这个exe文件 把目录bin里面的clang-format.exe文件复制出来,放到一个新文件夹里,比如我放到了D盘根目录下…

聊一聊 操作系统蓝屏 c0000102 的故障分析

一:背景 1. 讲故事 今年以来不知道为啥总有些朋友加我微信,让我帮忙分析下操作系统蓝屏问题,我也觉得挺好奇的,就问了其中一位朋友,说是B站来的,我就在拼命回忆,为啥会找我分析蓝屏?突然想到了去年好像录了一集关于 CrowdStrike 的热点事件。。。我本来是做.NET程序的故…

4-01-(C++类 this指针)

结构体传参,传递的是副本 结构体里面写函数,结构体的大小不变 函数的地址不在结构体里面。 类里面的函数都要传一个this指针,即 lea ecx,[s] 普通的函数结构体传参 this指针的特点 1、你用或者不用,它就在那里 2、参数个数确定的时候,用ecx来传递 3、参数个数不确…

协议通道版iMessage蓝号检测,iMessages数据筛选,无痕检测是否开启iMessage服务

一、实现iMessage数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2…

【开源】一款功能全面的商用级溯源防伪系统,适用于各种溯源场景

项目介绍 HiPi是一款开源、功能全面的商用级溯源防伪系统,一物一码系统,适用于各种溯源场景的大、中、小、微规模企业。系统能够追踪记录产品的生命周期各个环节,并将产品信息保存在系统中,实现品牌保护、产品营销、防止假冒伪劣产品、防窜货、产品追踪溯源等功能。 应用场…

行为分析智能监测摄像机

行为分析智能监测摄像机具有高效的行为识别和分类能力。通过摄像头捕捉到目标区域内的行为活动,并通过预先训练好的机器学习算法进行识别和分类,可以准确地分析出不同的行为特征,例如跌倒、打架等,并及时发出警报或提醒相关管理人员。这种高效的行为识别能力可以帮助监控中…

秸秆焚烧自动监测摄像机

秸秆焚烧自动监测摄像机具有高效的监测和识别能力。通过摄像头捕捉到秸秆焚烧的情况,并通过预先训练好的机器学习算法进行识别和分类,可以准确地分析出不同的烟雾、火焰等特征,并及时发出警报或提醒相关管理人员。这种高效的监测和识别能力可以帮助监测中心快速反应异常情况…

ServletContext 的 4 个常见应用!

一、ServletContext类详解 Web容器在启动时,会为每一个Web项目创建一个对应的ServletContext对象。它是当前项目中所有Servlet实例之间信息交互的“中间商”。(参见“Servlet的运行原理”) 注:一个Web项目对应一个ServletContext。(即:同一个Web项目中的所有servlet实例共…

Servlet 映射(访问)路径的 3 种方式!

Servlet的映射(访问)路径是在Web配置文件(web.xml)中编写的。如: <!-- Servlet的访问路径 --> <servlet-mapping><servlet-name>servlet1</servlet-name><url-pattern>/hello</url-pattern> </servlet-mapping>1、servlet映射…