对一个空括号比如"{}"、 "[]"进行反序列化�为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
}
1条答案
按热度按时间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在业务上是等价的,即解决了问题,又能规避额外的复杂性。