最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java解決Jackson反序列化字段名不匹配問題

 更新時間:2026年02月06日 09:40:17   作者:go 碼頭整點薯條  
這篇文章主要介紹了Java中使用Jackson庫處理JSON數(shù)據時常見的字段名不匹配問題,并提供了多種解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 Java 開發(fā)XML中,我們經常使用 Jackson 庫來處理 JSON 數(shù)據的序列化和反序列化。然而,在實際開發(fā)中,由于 JSON 和 Java 對象的字段命名風格不一致(如大小寫、is 前綴等),經常會出現(xiàn) UnrecognizedPropertyException 錯誤。本文將結合一個實際案例,分析常見的字段名不匹配問題,并提供多種解決方案,幫助開發(fā)者高效應對類似問題。

問題背景

假設我們有一個 JSON 數(shù)據,結構如下:

{
    "id": null,
    "msg": null,
    "isSuccess": true,
    "code": null,
    "data": {
        "Total": 1700,
        "Rows": [...]
    }
}

對應的 Java 類 ExamListResponseVo 定義如下:

@Data
public class ExamListResponseVo {
    private Object id;
    private String msg;
    private boolean isSuccess; // 問題1:Jackson 默認會去掉 is 前綴
    private Object code;
    private ExamListData data;

    @Data
    public static class ExamListData {
        private Integer total; // 問題2:JSON 中是 "Total",大小寫不匹配
        private List<ExamRow> rows;
    }
}

當我們使用 ObjectMapper 反序列化時,可能會遇到以下兩個錯誤:

error:Unrecognized field "isSuccess"

原因:isSuccess 在 JSON 中是 isSuccess,但 Jackson 默認會去掉 is 前綴,嘗試匹配 success。

error:Unrecognized field "Total"

原因:JSON 中的 "Total" 是首字母大寫,而 Java 類中是 total,大小寫不匹配。

解決方案

1. 解決isSuccess問題

方案 1:修改 Java 字段名(推薦)

private boolean success; // 改為 success,與 Jackson 默認行為一致

方案 2:使用@JsonProperty注解

@JsonProperty("isSuccess") // 強制匹配 JSON 中的 isSuccess
private boolean isSuccess;

方案 3:配置ObjectMapper禁用is前綴處理

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.USE_STD_BEAN_NAMING, true); // 禁止自動去掉 is 前綴

2. 解決Total大小寫問題

方案 1:修改 Java 字段名(推薦)

private Integer Total; // 與 JSON 完全一致

方案 2:使用@JsonProperty注解

@JsonProperty("Total")
private Integer total;

方案 3:配置ObjectMapper忽略大小寫

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

方案 4:忽略未知字段(適用于不可控 JSON 結構)

@Data
@JsonIgnoreProperties(ignoreUnknown = true) // 忽略 JSON 中多余的字段
public static class ExamListData {
    private Integer total;
    private List<ExamRow> rows;
}

最佳實踐

1. 保持 JSON 和 Java 字段名一致

  • 如果 JSON 可控,建議統(tǒng)一命名風格,如全部使用 snake_case 或 camelCase。

2. 優(yōu)先使用@JsonProperty注解

  • 適用于需要保留原有 Java 字段名但 JSON 字段名不同的情況。

3. 全局配置ObjectMapper

  • 如果項目中有大量大小寫不一致的情況,可以全局配置:

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
    mapper.configure(MapperFeature.USE_STD_BEAN_NAMING, true);

4. 使用@JsonIgnoreProperties避免未知字段報錯

  • 適用于第三方 API 返回的 JSON 結構可能變化的情況。

完整代碼示例

修正后的ExamListResponseVo

@Data
@JsonIgnoreProperties(ignoreUnknown = true) // 可選:忽略未知字段
public class ExamListResponseVo {
    private Object id;
    private String msg;
    @JsonProperty("isSuccess") // 顯式指定 JSON 字段名
    private boolean isSuccess;
    private Object code;
    private ExamListData data;

    @Data
    public static class ExamListData {
        @JsonProperty("Total") // 顯式指定 JSON 字段名
        private Integer total;
        private List<ExamRow> rows;
    }
}

反序列化代碼

ObjectMapper mapper = new ObjectMapper();
// 可選:全局配置
// mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

String responseBody = "..."; // JSON 字符串
ExamListResponseVo result = mapper.readValue(responseBody, ExamListResponseVo.class);

總結

問題解決方案適用場景
isSuccess 不匹配修改字段名 / @JsonProperty布爾字段帶 is 前綴
Total 大小寫問題修改字段名 / @JsonProperty / 全局配置JSON 字段名大小寫不一致
未知字段報錯@JsonIgnoreProperties第三方 API 返回不可控 JSON

推薦做法:

  • 盡量統(tǒng)一 JSON 和 Java 字段名(如 camelCase)。
  • 必要時使用 @JsonProperty 顯式映射。
  • 全局配置 ObjectMapper 適用于大型項目。
  • 使用 @JsonIgnoreProperties 增強魯棒性。

通過本文的解決方案,你可以輕松應對 Jackson 反序列化時的字段名不匹配問題,提高開發(fā)效率!

到此這篇關于Java解決Jackson反序列化字段名不匹配問題的文章就介紹到這了,更多相關Java Jackson反序列化字段名不匹配內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java隨機生成字符串的四種方式例子

    Java隨機生成字符串的四種方式例子

    這篇文章主要給大家介紹了關于Java隨機生成字符串的四種方式,隨機數(shù)在實際中使用很廣泛,比如要隨即生成一個固定長度的字符串、數(shù)字,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-10-10
  • 剖析SpringCloud Feign中所隱藏的坑

    剖析SpringCloud Feign中所隱藏的坑

    這篇文章主要為大家介紹了剖析SpringCloud Feign中所隱藏的坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 深入理解Java中的volatile關鍵字(總結篇)

    深入理解Java中的volatile關鍵字(總結篇)

    volatile這個關鍵字,不僅僅在Java語言中有,在很多語言中都有的,而且其用法和語義也都是不盡相同的。這篇文章主要介紹了Java中的volatile關鍵字,需要的朋友可以參考下
    2018-10-10
  • Spring Boot Rest控制器單元測試過程解析

    Spring Boot Rest控制器單元測試過程解析

    這篇文章主要介紹了Spring Boot Rest控制器單元測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 解決@RequestBody使用不能class類型匹配的問題

    解決@RequestBody使用不能class類型匹配的問題

    這篇文章主要介紹了解決@RequestBody使用不能class類型匹配的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springboot整合EHCache的實踐方案

    springboot整合EHCache的實踐方案

    EhCache是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。這篇文章給大家介紹了springboot整合EHCache的實踐方案,需要的朋友參考下
    2018-01-01
  • java實現(xiàn)酷狗音樂臨時緩存文件轉換為MP3文件的方法

    java實現(xiàn)酷狗音樂臨時緩存文件轉換為MP3文件的方法

    這篇文章主要介紹了java實現(xiàn)酷狗音樂臨時緩存文件轉換為MP3文件的方法,涉及java針對文件操作的相關技巧,需要的朋友可以參考下
    2016-08-08
  • java實現(xiàn)MD5加密方法匯總

    java實現(xiàn)MD5加密方法匯總

    本文給大家匯總介紹了2種java實現(xiàn)MD5加密的方法,非常的實用,這里分享給大家,學習下其中的思路,對大家學習java非常有幫助。
    2015-10-10
  • 關于log4j漏洞修復解決方案及源碼編譯

    關于log4j漏洞修復解決方案及源碼編譯

    Log4j?是Apache為Java提供的日志管理工具。他與System.out.println()的作用相似,用來跟蹤、調試、維護程序。這篇文章主要介紹了關于log4j漏洞修復解決方案及源碼編譯,需要的朋友可以參考下
    2021-12-12
  • mybatis-plus排除非表中字段的操作

    mybatis-plus排除非表中字段的操作

    這篇文章主要介紹了mybatis-plus排除非表中字段的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

武威市| 平罗县| 镶黄旗| 临高县| 秦安县| 招远市| 泌阳县| 崇仁县| 营口市| 巧家县| 舟山市| 阿克| 咸阳市| 竹溪县| 鄯善县| 浏阳市| 仁化县| 湟源县| 广东省| 长武县| 清水河县| 宜兰县| 安顺市| 红桥区| 营山县| 武威市| 疏勒县| 枣强县| 深圳市| 肥城市| 葫芦岛市| 湛江市| 顺昌县| 惠来县| 汶上县| 抚顺县| 昔阳县| 白河县| 金阳县| 茶陵县| 印江|