zoukankan      html  css  js  c++  java
  • FastJson序列化部分字段的方法

    Maven FastJson

    引入 fastjson 的 Maven 依赖:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.73</version>
    </dependency>
    

    FastJson 序列化依据

    FastJson 是根据 getter 方法来序列化的

    指定某些字段进行序列化

    • 只为需要序列化的字段生成 getter 方法,相反地,不希望序列化的字段就不生成 getter 方法
      • 缺点:有时候,虽然是不希望序列化的字段,但是代码中也是需要使用其 getter 方法的。
    • 假如Java Bean对象所有属性的 getter 方法都存在,还可以使用过滤器 SimplePropertyPreFilter 指定字段名称。(注意如果没有 getter 方法,过滤器中就算指定名称也不会生效)
      • 缺点:因为使用字符串来指定字段名称,所以如果类的属性名称修改了,这个地方的代码就会失效。
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter(User.class, "name");
    String data = JSONObject.toJSONString(user, filter);
    

    排除某些字段

    假如Java Bean对象所有属性的 getter 方法都存在,我们还有一个思路,就是排除某些字段,不让这些字段参与序列化:

    • 可以通过 @JSONField(serialize = false) 阻止某些字段序列化

    关于是否需要添加默认构造函数的问题

    我自己测试了一下,假如没有默认构造函数:

    • 1.2.35 版本及以前版本,反序列化时会抛出 com.alibaba.fastjson.JSONException: default constructor not found. class test.fastjson.serialization.User
    • 1.2.36 版本及以后版本,即使没有默认构造函数也不会抛出异常,会去尝试寻找合适的构造函数,具体逻辑,先留个坑,以后再研究一下源码再说。

    参考文献

  • 相关阅读:
    XSS 防御方法总结
    IE浏览器兼容方案
    js 排序算法
    webapck 打包体积优化策略
    webapck 速度优化策略
    Grunt、Gulp和Webpack对比
    数据库中的undo日志、redo日志
    使用sysbench对mysql压力测试
    java -cp & java jar的区别
    使用BenchmarkSQL测试PostgreSQL
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/fastjson-serialize-specific-properties.html
Copyright © 2011-2022 走看看