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
英文地址,請注明出處:http://en.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; 最…