【BUG】已解決:JsonMappingException

已解決:JsonMappingException

歡迎來到英杰社區icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998

概述:

????????沒有getter方法的實體的序列化,并解決Jackson引發的JsonMappingException異常。

????????默認情況下,Jackson 2只會處理公有字段或具有公有getter方法的字段。如果實體的所有字段都是私有或包內可見的,序列化將會失敗:

public class MyDtoNoAccessors {String stringValue;int intValue;boolean booleanValue;public MyDtoNoAccessors() {super();}// no getters
}
@Test(expected = JsonMappingException.class)
public void givenObjectHasNoAccessors_whenSerializing_thenException() throws JsonParseException, IOException {String dtoAsString = new ObjectMapper().writeValueAsString(new MyDtoNoAccessors());assertThat(dtoAsString, notNullValue());
}

完整的異常如下:

com.fasterxml.jackson.databind.JsonMappingException: 
No serializer found for class dtos.MyDtoNoAccessors 
and no properties discovered to create BeanSerializer 
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )

3.1. 全局自動檢測任何可見性的字段

????????對于這個問題的一個解決方案是全局配置ObjectMapper,使其檢測所有字段,不論其可見性:

objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

????????這將允許Jackson檢測到沒有getter方法的私有和包內可見字段,從而實現正確的序列化:

@Test
public void givenObjectHasNoAccessors_whenSerializingWithAllFieldsDetected_thenNoException() throws JsonParseException, IOException {ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessors());assertThat(dtoAsString, containsString("intValue"));assertThat(dtoAsString, containsString("stringValue"));assertThat(dtoAsString, containsString("booleanValue"));
}

3.2. 在類級別控制字段可見性

????????Jackson 2還提供了另一種選擇,即通過@JsonAutoDetect注解在類級別控制字段可見性:

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
public class MyDtoNoAccessors { ... }

????????使用這個注解,這個特定類的序列化現在應該可以正常工作:

@Test
public void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_thenNoException() throws JsonParseException, IOException {ObjectMapper objectMapper = new ObjectMapper();String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessors());assertThat(dtoAsString, containsString("intValue"));assertThat(dtoAsString, containsString("stringValue"));assertThat(dtoAsString, containsString("booleanValue"));
}

4. 在Jackson中禁用fail_on_empty_beans

????????在Jackson中,fail_on_empty_beans特性決定了在序列化過程中遇到空對象(沒有屬性)時是否拋出異常。默認情況下,Jackson會遇到空bean時拋出異常。

????????值得注意的是,fail_on_empty_beans特性默認啟用,若要禁用它,我們需要明確設置為false。具體方法取決于我們的具體用例。

4.1. 使用ObjectMapper配置

??????? 可以直接在ObjectMapper上禁用fail_on_empty_beans

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

通過這種方式配置ObjectMapper,我們告訴Jackson在序列化過程中遇到空bean時不拋出異常。

4.2. 使用Spring Boot

????????在Spring Boot中,我們可以在application.properties文件中設置以下屬性以全局禁用fail_on_empty_beans

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

????????這個屬性可以在應用級別設置,以控制Jackson序列化在整個應用中的行為

???【其他錯誤】

如果出現模塊錯誤

進入控制臺輸入:建議使用國內鏡像源pip install 模塊名稱 -i https://mirrors.aliyun.com/pypi/simple我大致羅列了以下幾種國內鏡像源:清華大學
https://pypi.tuna.tsinghua.edu.cn/simple阿里云
https://mirrors.aliyun.com/pypi/simple/豆瓣
https://pypi.douban.com/simple/百度云
https://mirror.baidu.com/pypi/simple/中科大
https://pypi.mirrors.ustc.edu.cn/simple/華為云
https://mirrors.huaweicloud.com/repository/pypi/simple/騰訊云
https://mirrors.cloud.tencent.com/pypi/simple/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45217.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue 級聯下拉框選擇的思維

在原來的js的思維下,級聯下拉框的選擇往往是,先綁定一級下拉框的菜單,然后在該下拉框下onchange, 在onchange事件中獲取當前選項,然后綁定二級下拉框的數據,以此類推…… 在vue框架下應該改變思維,首先設置…

經典再現,回顧常見排序算法之冒泡排序,附Java源碼及優化改進實現

回顧一下排序算法,老酒裝新瓶,給自己的技能點做個回放。 排序(Sorting) 是計算機程序設計中的一種重要操作,它的功能是將一個數據元素(或記錄)的任意序列,重新排列成一個有序的序列,也可以理解為高矮個站隊。 衡量排…

Renesas R7FA8D1BH (Cortex?-M85) 控制DS18B20

目錄 概述 1 軟硬件 1.1 軟硬件環境信息 1.2 開發板信息 1.3 調試器信息 2 FSP和KEIL配置 2.1 硬件接口電路 2.2 FSB配置DS18B20的IO 2.3 生成Keil工程文件 3 DS18B20驅動代碼 3.1 DS18B20介紹 3.2 DS18B20驅動實現 3.2.1 IO狀態定義 3.2.2 讀IO狀態函數 3.2.3…

OpenCV:python圖像旋轉,cv2.getRotationMatrix2D 和 cv2.warpAffine 函數

前言 僅供個人學習用,如果對各位朋友有參考價值,給個贊或者收藏吧 ^_^ 一. cv2.getRotationMatrix2D(center, angle, scale) 1.1 參數說明 parameters center:旋轉中心坐標,是一個元組參數(col, row) angle:旋轉角度…

Go-知識測試-模糊測試

Go-知識測試-模糊測試 1. 定義2. 例子3. 數據結構4. tesing.F.Add5. 模糊測試的執行6. testing.InternalFuzzTarget7. testing.runFuzzing8. testing.fRunner9. FuzzXyz10. RunFuzzWorker11. CoordinateFuzzing12. 總結 建議先看:https://blog.csdn.net/a1879272183…

一文入門【NestJs】Providers

Nest學習系列 ??一文入門【NestJS】 ??一文入門【NestJs】Controllers 控制器 🚩 前言 在NestJS的世界里,理解“Providers”是構建健壯、可維護的后端服務的關鍵。NestJS,作為Node.js的一個現代框架,采用了Angular的一些核…

Redis的安裝配置及IDEA中使用

目錄 一、安裝redis,配置redis.conf 1.安裝gcc 2.將redis的壓縮包放到指定位置解壓 [如下面放在 /opt 目錄下] 3.編譯安裝 4.配置redis.conf文件 5.開機自啟 二、解決虛擬機本地可以連接redis但是主機不能連接redis 1.虛擬機網絡適配器網絡連接設置為橋接模式…

VSCode上通過C++實現單例模式

單例模式實際上就是為了確保一個類最多只有一個實例,并且在程序的任何地方都可以訪問這個實例,也就是提供一個全局訪問點,單例對象不需要手動釋放,交給系統來釋放就可以了,單例模式的設計初衷就是為了在整個應用程序的…

vue 下拉菜單樹形結構——vue-treeselect的組件使用

參考: https://www.cnblogs.com/syjtiramisu/p/17672866.htmlhttps://www.cnblogs.com/syjtiramisu/p/17672866.html vue-treeselect的使用 - 簡書下載依賴 使用https://www.jianshu.com/p/459550e1477d 實際項目使用:

uni-app iOS上架相關App store App store connect 云打包有次數限制

相冊權限 uni-app云打包免費有次數 切換一個賬號繼續

使用SOAP與TrinityCore交互(待定)

原文:SOAP with TrinityCore | TrinityCore MMo Project Wiki 如何使用SOAP與TC交互 SOAP代表簡單對象訪問協議,是一種類似于REST的基于標準的web服務訪問協議的舊形式。只要必要的配置到位,您就可以利用SOAP向TrinityCore服務器發送命令。 …

Open3D 計算點云配準的精度和重疊度

目錄 一、概述 1.1計算配準精度 1.2計算點云重疊度 二、代碼實現 2.1關鍵函數 2.2完整代碼 三、實現效果 3.1原始點云 3.2計算結果 一、概述 在點云配準中,精度和重疊度是兩個重要的評價指標。精度通常用均方根誤差(RMSE)來衡量,而重疊度則表示兩個點云在…

centos環境啟動/重啟java服務腳本優化

centos環境啟動/重啟java服務腳本優化 引部分命令說明根據端口查詢服務進程殺死進程函數腳本接收參數 腳本注意重啟文檔位置異常 引 在離線環境部署的多個java應用組成的系統,測試階段需要較為頻繁的發布,因資源限制,沒有弄devops或CICD那套…

華為手機聯系人不見了怎么恢復?3個解決方案

華為手機聯系人列表就像是我們精心編織的社交網絡之網。然而,有時,這張網可能會因為各種原因而意外破損,聯系人信息消失得無影無蹤,讓我們陷入“人脈孤島”的困境。華為手機聯系人不見了怎么恢復?別擔心,我…

構建高質量數據集與智能數據工程平臺:播客AI Odyssey深度對話實錄

對話整數智能聯創和前IDEA研究員:構建高質量數據集與智能數據工程平臺 - AI Odyssey | 小宇宙 - 聽播客,上小宇宙 人工智能技術的日益深遠發展,對人工智能的性能提升與技術迭代提出了新的要求。在大模型訓練中,已有的研究和實踐表…

【操作系統】進程管理——用信號量機制解決問題,以生產者-消費者問題為例(個人筆記)

學習日期:2024.7.10 內容摘要:利用信號量機制解決幾個經典問題模型 目錄 引言 問題模型 生產者-消費者問題(經典) 多生產者-多消費者問題 吸煙者問題 讀者寫者問題(難點) 哲學家進餐問題&#xff0…

解決POST請求中文亂碼問題

解決POST請求中文亂碼問題 1、亂碼原因2、解決方法3、具體步驟 💖The Begin💖點點關注,收藏不迷路💖 在Web開發中,處理POST請求時經常遇到中文亂碼問題,這主要是由于服務器在接收到POST請求的數據后&#x…

物聯網時代的等保測評:保障萬物互聯的安全

隨著物聯網(IoT)技術的飛速發展,我們的生活正逐漸進入一個萬物互聯的新時代。從智能家居到智慧城市,從無人駕駛到農業物聯網,IoT技術正在滲透到我們生活的方方面面。然而,隨著IoT設備數量的激增&#xff0c…

BUG解決:postman可以請求成功,但Python requests請求報403

目錄 問題背景 問題定位 問題解決 問題背景 使用Python的requests庫對接物聯數據的接口之前一直正常運行,昨天突然請求不通了,通過進一步驗證發現凡是使用代碼調用接口就不通,而使用postman就能調通,請求參數啥的都沒變。 接口…

SSL 證書錯誤:如何修復以及錯誤發生的原因

SSL證書可以提升網站的可信度。然而,如果您的SSL證書出現錯誤,您可能會得到一個“不安全”的標簽,這可能會導致訪問者失去對您網站的信任并轉向競爭對手。 本文將介紹SSL證書錯誤的原因及其對用戶的潛在影響。隨后,我們將提供詳細…