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

使用JSON.toJSONString()返回{}的原因

 更新時(shí)間:2022年02月07日 11:11:41   作者:飛子  
這篇文章主要介紹了使用JSON.toJSONString()返回{}的原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

JSON.toJSONString()返回{}原因

測(cè)試代碼

public static void main(String[] args) {undefined
ResultModel resultModel = ResultModel.error(“110”,“error”);
System.out.println(JSON.toJSONString(resultModel));
}

原因

ResultModel 未添加Getter,只需添加Getter即可

JSON.toJSONString的坑有些字段沒(méi)有了

1.問(wèn)題

在使用fastjson中的JSON.toJSONString方法將對(duì)象轉(zhuǎn)換成json字符串的時(shí)候,發(fā)現(xiàn)有些字段沒(méi)有了。如:

public static void main(String[] args) {
? ? ? ? Map<String,Object>map=new HashMap<>();
? ? ? ? map.put("id","1");
? ? ? ? map.put("name",null);
? ? ? ? System.out.println(JSON.toJSONString(map));
? ? }

輸出結(jié)果: {"id":"1"}

輸出結(jié)果中沒(méi)有了 "name"這個(gè)屬性了;

2.解決方式

加SerializerFeature.WriteMapNullValue)

public static void main(String[] args) {
? ? ? ? Map<String,Object>map=new HashMap<>();
? ? ? ? map.put("id","1");
? ? ? ? map.put("name",null);
? ? ? ? System.out.println(JSON.toJSONString(map,SerializerFeature.WriteMapNullValue));
? ? }

輸出結(jié)果: {"name":null,"id":"1"}

3.原因

轉(zhuǎn)json串,默認(rèn)設(shè)置了許多序列化配置:

名稱含義備注
QuoteFieldNames輸出key時(shí)是否使用雙引號(hào),默認(rèn)為true 
UseSingleQuotes使用單引號(hào)而不是雙引號(hào),默認(rèn)為false 
WriteMapNullValue是否輸出值為null的字段,默認(rèn)為false 
WriteEnumUsingToStringEnum輸出name()或者original,默認(rèn)為false 
UseISO8601DateFormatDate使用ISO8601格式輸出,默認(rèn)為false 
WriteNullListAsEmptyList字段如果為null,輸出為[],而非null 
WriteNullStringAsEmpty字符類型字段如果為null,輸出為”“,而非null 
WriteNullNumberAsZero數(shù)值字段如果為null,輸出為0,而非null 
WriteNullBooleanAsFalseBoolean字段如果為null,輸出為false,而非null 
SkipTransientField如果是true,類中的Get方法對(duì)應(yīng)的Field是transient,序列化時(shí)將會(huì)被忽略。默認(rèn)為true 
SortField按字段名稱排序后輸出。默認(rèn)為false 
WriteTabAsSpecial把\t做轉(zhuǎn)義輸出,默認(rèn)為false 
PrettyFormat結(jié)果是否格式化,默認(rèn)為false 
WriteClassName序列化時(shí)寫(xiě)入類型信息,默認(rèn)為false。反序列化是需用到 
DisableCircularReferenceDetect消除對(duì)同一對(duì)象循環(huán)引用的問(wèn)題,默認(rèn)為false 
WriteSlashAsSpecial對(duì)斜杠’/’進(jìn)行轉(zhuǎn)義 
BrowserCompatible將中文都會(huì)序列化為\uXXXX格式,字節(jié)數(shù)會(huì)多一些,但是能兼容IE 6,默認(rèn)為false 
WriteDateUseDateFormat全局修改日期格式,默認(rèn)為false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); 
DisableCheckSpecialChar一個(gè)對(duì)象的字符串屬性中如果有特殊字符如雙引號(hào),將會(huì)在轉(zhuǎn)成json時(shí)帶有反斜杠轉(zhuǎn)移符。如果不需要轉(zhuǎn)義,可以使用這個(gè)屬性。默認(rèn)為false 
NotWriteRootClassName  
BeanToArray將對(duì)象轉(zhuǎn)為array輸出 
WriteNonStringKeyAsString不是String的字段寫(xiě)為String 
NotWriteDefaultValue不設(shè)默認(rèn)值 
BrowserSecure  
IgnoreNonFieldGetter忽略沒(méi)有g(shù)etter方法的屬性 
WriteEnumUsingName目前版本的fastjson默認(rèn)對(duì)enum對(duì)象使用WriteEnumUsingName屬性,因此會(huì)將enum值序列化為其Name。
使用WriteEnumUsingToString方法可以序列化時(shí)將Enum轉(zhuǎn)換為toString()的返回值;同時(shí)override toString函數(shù)能夠?qū)num值輸出需要的形式。但是這樣做會(huì)帶來(lái)一個(gè)問(wèn)題,對(duì)應(yīng)的反序列化使用的Enum的靜態(tài)方法valueof可能無(wú)法識(shí)別自行生成的toString(),導(dǎo)致反序列化出錯(cuò)。
如果將節(jié)省enum序列化后的大小,可以將enum序列化其ordinal值,保存為int類型。fastJson在反序列化時(shí),如果值為int,則能夠使用ordinal值匹配,找到合適的對(duì)象。
fastjson要將enum序列化為ordinal只需要禁止WriteEnumUsingName feature。
首先根據(jù)默認(rèn)的features排除WriteEnumUsingName,然后使用新的features序列化即可。
 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java int與integer的對(duì)比區(qū)別

    Java int與integer的對(duì)比區(qū)別

    這篇文章主要介紹了Java int與integer的對(duì)比區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java 中使用數(shù)組存儲(chǔ)和操作數(shù)據(jù)

    Java 中使用數(shù)組存儲(chǔ)和操作數(shù)據(jù)

    本文將介紹Java中常用的數(shù)組操作方法,通過(guò)詳細(xì)的示例和解釋,幫助讀者全面理解和掌握這些方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot工程中Spring Security應(yīng)用實(shí)踐記錄流程分析

    SpringBoot工程中Spring Security應(yīng)用實(shí)踐記錄流程分析

    Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架。這篇文章主要介紹了SpringBoot工程中Spring Security應(yīng)用實(shí)踐,需要的朋友可以參考下
    2021-09-09
  • springboot集成KoTime的配置過(guò)程

    springboot集成KoTime的配置過(guò)程

    koTime是一個(gè)springboot項(xiàng)目性能分析工具,通過(guò)追蹤方法調(diào)用鏈路以及對(duì)應(yīng)的運(yùn)行時(shí)長(zhǎng)快速定位性能瓶頸,這篇文章主要介紹了springboot集成KoTime,需要的朋友可以參考下
    2022-06-06
  • Java獲取HttpServletRequest的三種方法詳解

    Java獲取HttpServletRequest的三種方法詳解

    這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個(gè)接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest
    HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于mybatis if else if 條件判斷SQL片段表達(dá)式取值和拼接問(wèn)題

    關(guān)于mybatis if else if 條件判斷SQL片段表達(dá)式取值和拼接問(wèn)題

    這篇文章主要介紹了mybatis if else if 條件判斷SQL片段表達(dá)式取值和拼接,文章通過(guò)自己真實(shí)使用的例子給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-09-09
  • Mybatisplus自動(dòng)填充實(shí)現(xiàn)方式及代碼示例

    Mybatisplus自動(dòng)填充實(shí)現(xiàn)方式及代碼示例

    這篇文章主要介紹了Mybatisplus自動(dòng)填充實(shí)現(xiàn)方式及代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java基礎(chǔ)--JDK SPI概述

    java基礎(chǔ)--JDK SPI概述

    SPI是一種服務(wù)發(fā)現(xiàn)機(jī)制,本文就SPI做了詳細(xì)概述,具有很好的參考價(jià)值,希望對(duì)小伙伴們有所幫助,感興趣的朋友一起來(lái)參考參考吧
    2021-08-08
  • Spring?Security配置保姆級(jí)教程

    Spring?Security配置保姆級(jí)教程

    Spring?Security是一個(gè)功能強(qiáng)大且可高度自定義的身份驗(yàn)證和訪問(wèn)控制框架。它是保護(hù)基于Spring的應(yīng)用程序的事實(shí)上的標(biāo)準(zhǔn)。Spring?Security是一個(gè)專注于為Java應(yīng)用程序提供身份驗(yàn)證和授權(quán)的框架
    2023-02-02
  • JavaFX Metro UI 和 開(kāi)發(fā)庫(kù)使用簡(jiǎn)介

    JavaFX Metro UI 和 開(kāi)發(fā)庫(kù)使用簡(jiǎn)介

    這篇文章主要介紹了JavaFX Metro UI 和 開(kāi)發(fā)庫(kù)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

淮南市| 东山县| 宜州市| 黄梅县| 广饶县| 新民市| 龙井市| 德安县| 贡山| 无极县| 文昌市| 奉化市| 昌都县| 正蓝旗| 临湘市| 全椒县| 修武县| 禄丰县| 黑山县| 牙克石市| 都江堰市| 新宾| 广灵县| 河曲县| 武强县| 融水| 吴江市| 满洲里市| 西盟| 铅山县| 积石山| 安远县| 历史| 始兴县| 忻州市| 新乡县| 海安县| 湘乡市| 綦江县| 开远市| 阿尔山市|