<small id='eHxSE1gm9Y'></small> <noframes id='R3BGf'>

  • <tfoot id='prziy0FS'></tfoot>

      <legend id='8ajYd'><style id='Xq5ZMes6L'><dir id='8ixjkOr0Dw'><q id='1KbIJzwo'></q></dir></style></legend>
      <i id='Cm9MbV7cZ'><tr id='lFTz'><dt id='7HIh6Gp'><q id='gzwy'><span id='4sS5'><b id='P3HzC'><form id='CNBiEv0Gl'><ins id='RDsaE'></ins><ul id='x4QfO'></ul><sub id='olFpjhbUQc'></sub></form><legend id='CGQrNIYVw'></legend><bdo id='pTdAP7IiH'><pre id='aNVhTAj3zS'><center id='qzm7BFCKt'></center></pre></bdo></b><th id='Kl95fv7'></th></span></q></dt></tr></i><div id='LbMyHQzt'><tfoot id='GAO0iaJMh'></tfoot><dl id='1s3HT'><fieldset id='41SY'></fieldset></dl></div>

          <bdo id='3VhEi'></bdo><ul id='WPmO9ZYR3Q'></ul>

          1. <li id='dKgqiHErj'></li>
            登陆

            重新认识一个强壮的 Gson

            admin 2019-11-22 239人围观 ,发现0个评论

            欢迎重视一同学习更多java

            作者:Mafly, 来历:www.cnblogs.com/mafly/p/gson.html

            从一个 Bug 说起

            不知道你们发现没有,你写完的程序不管其时怎样测验,过一段时间总会出 Bug 。再说一个每天都在发作的比方:在你写完一篇博客后,当即查看的话,总是查不出自己写的错别字。

            听说这些都包括有一些大脑对当下事物处理的逻辑在里面,并且还有心理学要素在里面,我也不明白。横竖现在便是程序出 Bug 了!出 Bug 了!!Bug !!!

            工作是这样的,客户端恳求服务器敞开接口时,咱们是以 JSON 字符串的方法回来的,这时候原本正常回来方法是这样:

            {
            "name": "mafly",
            "age": "18",
            "sex": "男"
            }

            但这个名字叫Mafly的人他不想让你知道他是男是女。就没填性别,程序中默许赋值为 null了,JSON 序列化时就发作了意想不到的事儿。

            重现一下那个 Bug

            用于转化Java目标为 Json 字符串和把 Json 字符串转化为目标的东西类有许多重新认识一个强壮的 Gson,Gson、Jackson、FastJson等,咱们用的是 Gson, 它是 Google 开发的,还据传说它的功能比较强壮一些。嗯,对,咱们用的便是这个。先看示例代码:

            public static void main(String[] args) {

            HashMap map = new HashMap();
            map.put("name", "mafly");
            map.put("age", "18");
            map.put("sex", null);
            String jsonString = new Gson().toJson(map);
            System.err.println(jsonString);
            }

            你猜会输出上面那段咱们预期的 Json 串吗?但是并不会。


            便是这个当 Sex=null时,用 Gson 的tojson办法会把 null 值疏忽,然后序列化之后输出不包括这个特点值的 Json 串。其实咱们的预期是输出 {"sex": ""} 或 {"sex": null}, 那怎样做呢?

            经过搜索引擎发现,网上大约存在以下三种解决方案:

            • 调用 toJson(Object src, Type typeOfSrc, JsonWriter writer) 办法
            • 注册自定义 TypeAdapter
            • 设置 serializeNulls 特点值(引荐)


            前两种方法我没测验,引荐第三种方法,简略便利,源码如下:

            GsonBuilder gsonBuilder = new GsonBuilder();
            String jsonString1 = gsonBuilder.serializeNulls().create().toJson(map);
            System.err.println(jsonString1);


            输出契合咱们的需求了, {"sex": null},如图:


            简略转到源码看了看,除了这一个设置还有许多,真是太便利了。调用seria重新认识一个强壮的 GsonlizeNulls()后, Gson 设置 serializeNulls 特点值为 true,默许是false,源码:

            public GsonBuilder serializeNulls() {
            this.serializeNulls = true;
            return this;
            }

            从头认识一下 Gson

            我看了几行 Gson 的源码后,我发现它可装备及特性多的不计其数,能够用@SerializedName注解给特点重命名,用@Expose注解标识特点不进行序列化,支撑 Map 的 key 为杂乱目标的方法,日期类型转化为特定格局,还有区别版别进行显现,这些在日常项目中都极常用到,只不过如同咱们之前都是自己完成的。

            我简略建立了一个重新认识一个强壮的 Gson UserInfo 实体类,里面包括了username、age、sex这三个特点值。试着测验了一下其间一两个:

            1.@Expose 想让谁输出谁输出,注解代码如图:

            设置excludeFieldsWithout重新认识一个强壮的 GsonExposeAnnotation(),看下面第三行是输出:


            2电脑黑屏怎么办.@SerializedName 想怎样显现怎样显现,注解代码如图:


            我想把age再 Json序列化时显现maflyAge,现在就能够了,输出如下图:


            3.@Since、@Until 不同版别不同数据,注解代码如图:

            这儿要设置setVersion(3.2),@Since标示的在 3.2 版别或之后才会输出,@Until标示的只在 3.2 版别前重新认识一个强壮的 Gson才有。作用输出如下图:

            当然,还有很多特性呢,比方字段首字母大写阿、成果格局化阿等等,我这儿抛个砖,剩余的有需求的能够试试。

            总结一下

            这是由于一个 Json 序列化输出后发现的小 Bug ,也能够说不能算 Bug ,由于是咱们关于自己运用的东西类并不了解导致的,所以,去试着了解你运用的任何一个开源东西类或重新认识一个强壮的 Gson项目,关于遇到的问题能够很好的得到解决,然后也能够提高自己吧。

          2. 安徽区域废铜商场报价(11月18日)
          3.   《中华人民共和国1号平台时时彩登录官网-黎川抚商村镇银行违法遭罚董事遭正告 贷后办理不到位银行业监督办理法》第四十六条规矩:银行业金融机构有下列景象之一,由国务院银行业监督办理机构责令改正,并处二十万元以上五十万元以下罚款;情节特别严峻或许逾期不改正的,能够责令停业整顿或许吊销其

          4. 1号平台时时彩登录官网-黎川抚商村镇银行违法遭罚董事遭正告 贷后办理不到位

            2019-12-06
          5. 1号平台时时彩登录官网-海康威视两董事被立案查询续:大宗买卖两边涉内情信息?
          6. 请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP