fastjson 对一个空括号比如"{}"、 "[]"进行反序列化为POJO, 如何返回null 而不是一个包含所有字段的空对象

gcuhipw9  于 2021-11-27  发布在  Java
关注(0)|答案(1)|浏览(454)

对一个空括号比如"{}"、 "[]"进行反序列化�为POJO, 如何返回null 而不是一个包含所有字段的空对象

比如:

public class Rule{
    Integer id;
    IntegerRange priceRange;
    Set<String> valueSet;

  }

  public  class IntegerRange {
    Integer min;
    Integer max;
  }

  public static void main(String[] args) {
    Rule rule1 = JSON.parseObject("{\"avgPriceRange\":{}, "valueSet":[]}", Rule.class);

    Rule rule2 = JSON.parseObject("{}", Rule.class);

   //怎么实现反序列化得到rule1==rule2==null
  }
guicsvcw

guicsvcw1#

@desslee ,你好。
1.从json的语义Angular 来说,[],{},以及"{"avgPriceRange":{}, "valueSet":[]}",
都不是null,所以默认情况下,fastjson无法把他们变成null。
2.好在我们可以通过fastjson的扩展机制或JSONObject来实现这个目的
2.1 反序列化的扩展机制可以参见
https://github.com/alibaba/fastjson/wiki/ObjectDeserializer_cn
2.2 JSONObject方式
可以先parse成JSONObject,本质上是一个大Map中嵌套的小map:对应于{}、大map是空的;对于"{"avgPriceRange":{}, "valueSet":[]}",循环判断一下value里是空的即可。
3. 其实这种情况还是比较建议你从POJO的设计上考虑,使直接使用new Rule()与null在业务上是等价的,即解决了问题,又能规避额外的复杂性。

相关问题