ObjectMapper教程

ObjectMapper 简介

ObjectMapper 是 Jackson 库的核心类,用于 Java 对象与 JSON 数据之间的相互转换。它支持序列化(对象转 JSON)和反序列化(JSON 转对象),广泛应用于 REST API、数据存储和配置处理等场景。


基本依赖配置

在 Maven 项目中添加 Jackson 依赖:

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


序列化(对象转 JSON)

将 Java 对象转换为 JSON 字符串:

ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 25);
String json = mapper.writeValueAsString(user);
System.out.println(json); // 输出:{"name":"Alice","age":25}
package com.example.util;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ReSultMapUtil {public static void main(String[] args) throws JsonProcessingException {Map  resultmap  =new HashMap();Map map1=new HashMap();map1.put("age",18);map1.put("tel","18788909090");map1.put("name","zhangsan");Map map2=new HashMap();map2.put("age",19);map2.put("tel","18888909090");map2.put("name","lisan");List list=new ArrayList<>();list.add(map1);list.add(map2);resultmap.put("list",list);System.out.println(  buildSuccessMesage(resultmap));}static String    buildSuccessMesage(Map bodymap){ObjectMapper objectMapper = new ObjectMapper();Map  resultmap  =new HashMap();Map  headtmap  =new HashMap();String  result="";headtmap.put("result","success");headtmap.put("msgcode","200");resultmap.put("SYSHEAD",headtmap);resultmap.put("BODY",bodymap);try {result=   objectMapper.writeValueAsString(resultmap);} catch (JsonProcessingException e) {e.printStackTrace();}
return result;}
}

注意事项

  • 类字段需提供 getter 方法,否则字段可能被忽略。
  • 使用 @JsonInclude(JsonInclude.Include.NON_NULL) 可忽略 null 值字段。

反序列化(JSON 转对象)

将 JSON 字符串转换为 Java 对象:

String json = "{\"name\":\"Bob\",\"age\":30}";
User user = mapper.readValue(json, User.class);
System.out.println(user.getName()); // 输出:Bob

常见注解

  • @JsonProperty:自定义 JSON 字段名。
  • @JsonIgnore:忽略字段序列化。

处理复杂结构

嵌套对象转换

public class Order {private User user;private List<String> items;
}String orderJson = "{\"user\":{\"name\":\"Alice\"},\"items\":[\"item1\"]}";
Order order = mapper.readValue(orderJson, Order.class);

集合类型处理

List<User> users = mapper.readValue("[{\"name\":\"Alice\"}]", new TypeReference<List<User>>() {});


高级配置

日期格式化

mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));

美化输出

String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);

忽略未知字段

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);


异常处理

捕获转换过程中的异常:

try {User user = mapper.readValue(invalidJson, User.class);
} catch (JsonProcessingException e) {e.printStackTrace();
}


性能优化

  • 复用 ObjectMapper 实例(线程安全)。
  • 使用 JsonFactory 处理流式 JSON(大文件场景)。

通过以上方法,可以高效利用 ObjectMapper 实现 Java 与 JSON 的灵活转换。

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

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

相关文章

【Node.js安装注意事项】-安装路径不能有空格

问题描述&#xff1a;在项目中使用 nodemon时&#xff0c;出现了nodemon 启动问题&#xff1a;nodemon : 无法将“nodemon”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。解决办法&#xff1a;在网上找了很多教程&#xff0c;试了很多办法&#xff0c;什么重新配置环境…

Shader开发(六)什么是着色器

在前面的章节中&#xff0c;我们简要提到了着色器的概念&#xff0c;现在有了渲染管线的基础知识&#xff0c;我们可以更深入地理解着色器的真正含义。着色器&#xff08;Shader&#xff09;是运行在图形处理单元&#xff08;GPU&#xff09;上的专用程序&#xff0c;这与我们日…

操作系统-lecture4(进程的调度)

进程的切换 接下来需要了解两个问题 谁触发了进程切换进程切换的动作 中断技术 中断源 中断处理过程&#xff08;陷阱机制&#xff09; 特权指令和非特权指令 Privileged Instructions&#xff1a;特权指令 •The Instructions that can run only in Kernel Mode are called…

机器人程序优化

机器人程序优化核心摘要 本视频详细讲解了机器人程序优化的方法与实践&#xff0c;旨在提高程序的可读性和复用性。通过学习文件夹、子程序调用以及路点优化等核心概念&#xff0c;观众将掌握如何将复杂的机器人搬运程序进行结构化整理&#xff0c;使其更易于理解、调试和在不…

一套视频快速入门并精通PostgreSQL

PostgreSQL从入门到精通系列PostgreSQL数据库是一个对理论知识与操作能力并重的技术&#xff0c;想要快速入门PostgreSQL数据库&#xff0c;这两个方面都要重视。这里的PostgreSQL从入门到精通&#xff0c;是专门针对刚入门的新手小白而录制的一套&#xff0c;有理论讲解也有动…

供应商管理系统有哪些功能?

在企业供应链数字化体系中&#xff0c;供应商管理系统是连接企业与外部合作伙伴的核心枢纽。以鲸采云采购管理系统的供应商模块为例&#xff0c;其功能设计围绕 “全生命周期管理 风险防控 协同效率” 三大核心&#xff0c;通过技术手段解决传统供应商管理中的信息碎片化、流…

新手向:国内外大模型体验与评测

国内外大模型体验与评测技术详解 近年来,人工智能领域的大模型技术取得了突破性进展,以GPT-4、Claude、文心一言等为代表的大语言模型(LLM)已经成为行业热点。国内外科技巨头纷纷布局这一赛道:国外有OpenAI的GPT系列、Anthropic的Claude、Google的PaLM,国内则有百度的文…

深度解读 CSGHub:开源协议、核心功能与产品定位

在大模型时代&#xff0c;“可用”不再足够&#xff0c;企业更需要“可管”、“可控”、“可演进”的一体化解决方案。作为国产开源阵营的中坚力量&#xff0c;CSGHub 如何从“开源与协议”到“功能定位”层层打磨&#xff0c;满足不同行业对合规、安全和灵活部署的诉求&#x…

本土化DevOps实践新篇章:Gitee引领企业高效协作新时代

本土化DevOps实践新篇章&#xff1a;Gitee引领企业高效协作新时代 在数字化转型的浪潮席卷全球的当下&#xff0c;软件开发与运维的协同效率已经成为决定企业竞争力的关键因素。随着国内企业对于数据安全和合规性的要求日益严格&#xff0c;寻找一套既符合本土监管要求又能提升…

B树、B+树、红黑树区别

一、核心概念与性质对比1. B树&#xff08;Balanced Tree&#xff09;定位&#xff1a;多路平衡搜索树&#xff0c;专为磁盘存储优化核心性质&#xff1a;每个节点存储 k-1个键值和k个子节点指针&#xff08;m/2 ≤ k ≤ m&#xff0c;m为阶数&#xff09;所有叶子节点位于同一…

Spring AI 使用阿里百炼平台实现流式对话:基于 SSE 的实践

Spring AI阿里百炼平台实现流式对话&#xff1a;基于 SSE 的实践指南 在大模型应用开发中&#xff0c;流式对话是提升用户体验的关键特性。本文将详细介绍如何利用 Spring AI 结合 Spring Boot&#xff0c;基于 SSE&#xff08;Server-Sent Events&#xff09;协议实现高效的流…

Ubuntu lamp

Ubuntu lamp 前言 在Ubuntu安装lamp架构 我们了解到 lamp是完整的架构 我们前面了解到了 集合了Linux系统 apache MySQL 和PHP语言的完整架构 我们前面说了Centos7中编译安装 lamp 那么 我们去说一下在Ubuntu中安装 ‍ ‍ 安装apache2 ‍ apt直接安装apache2 apt -y install a…

开源向量LLM - Qwen3-Embedding

1 Qwen3-Embedding介绍 Qwen3-Embedding遵循 Apache 2.0 许可证&#xff0c;模型大小从0.6B到8B&#xff0c;支持32k长文本编码。 Model TypeModelsSizeLayersSequence LengthEmbedding DimensionMRL SupportInstruction AwareText EmbeddingQwen3-Embedding-0.6B0.6B2832K10…

云计算服务模式全解析:IaaS、PaaS、SaaS与DaaS的区别与应用

一、云计算概述 云计算是一种通过互联网提供计算服务的模式&#xff0c;其核心特点是输入/输出与计算不在同一主机上。一个完整的云计算环境由云端&#xff08;计算设备&#xff09;、计算机网络和终端&#xff08;输入/输出设备&#xff09;三部分组成&#xff0c;即"云…

qwen 多模态 预训练流程步骤详细介绍

Qwen&#xff08;通义千问&#xff09;是阿里云推出的大语言模型&#xff0c;其多模态预训练是一个复杂且专业的过程&#xff0c;虽然官方没有完全公开全部细节&#xff0c; 但从多模态大模型通用的预训练逻辑上&#xff0c;一般包含以下主要步骤&#xff1a; 数据准备 多模态数…

FastDDS (SharedMemory)

SharedMemSegment Start // Fast-DDS/src/cpp/utils/shared_memory/SharedMemSegment.hppclass SharedSegmentBase {内部类 start class Id { public:typedef UUID<8> type;Id(); // 返回共享内存变量的IDId(const Id& other); // 设置共享内存变量的IDvoid g…

sqli-labs:Less-5关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;单引号包裹&#xff09;提示&#xff1a;参数id需以闭合 但有意思的是&#xff0c;php代码的输出语句不是如下这种…

标准项目-----网页五子棋(4)-----游戏大厅+匹配+房间代码

页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>游戏大厅</title><l…

MySQL分析步

MySQL分析 -- 库名 set dbName bsa_crmeb_bak; -- 表名 set tableName bsa_crmeb_bak;-- 查看bsa_crmeb_bak数据库基本信息 SELECTSCHEMA_NAME AS 数据库名,DEFAULT_CHARACTER_SET_NAME AS 字符集,DEFAULT_COLLATION_NAME AS 排序规则 FROM information_schema.SCHEMATA WHER…

工程化(二):为什么你的下一个项目应该使用Monorepo?(pnpm / Lerna实战)

工程化(二)&#xff1a;为什么你的下一个项目应该使用Monorepo&#xff1f;&#xff08;pnpm / Lerna实战&#xff09; 引子&#xff1a;前端项目的“孤岛困境” 随着你的项目或团队不断成长&#xff0c;一个棘手的问题会逐渐浮现&#xff1a;代码该如何组织&#xff1f; 最…