[alibaba/fastjson]parseObject方法丢失null对应键值对

2024-05-23 441 views
3

我在Spring中使用FastJsonHttpMessageConverter发现的该问题。我跟踪了一下代码,发现最后调用的是JSON.parseObject(String text, Class clazz)方法。因此抽取了如下的一个测试代码,复现了我的问题。

public class ParseTest {

  public static void main(String[] args) {
    String str = "{\"taskId\":\"7d590240bc394753835a38244378df0f\",\"condition\":{\"taskPurposeCode\":null,\"data\":{\"name\":\"全领域评价模型\",\"id\":553,\"type\":\"FULL\",\"version\":\"20191225175002\"},\"fieldCode\":\"13ecf353f2faf550b1dbb1e868828e71\",\"creditType\":3,\"fieldId\":\"5ee812fe9dbf4929b29a5cfc9cf13ff8\"}}";

    TaskDTO dto = JSON.parseObject(str, TaskDTO.class);
    System.out.println(dto.getCondition());
  }
}
class TaskDTO implements Serializable {
  private String taskId;

  private String condition;

  public String getTaskId() {
    return taskId;
  }

  public void setTaskId(String taskId) {
    this.taskId = taskId;
  }

  public String getCondition() {
    return condition;
  }

  public void setCondition(String condition) {
    this.condition = condition;
  }
}

运行后,丢失了"taskPurposeCode":null。

除了修改我的JavaBean外,还有什么方法避免这个问题吗?

回答

2

可以把他转成HashMap,不用你这个JavaBean,但是不知道能不能满足你的需求

4

可以把他转成HashMap,不用你这个JavaBean,但是不知道能不能满足你的需求

我思考过这种方案,就是我需要修改的地方有点多。原来直接全局配置了FastJsonHttpMessageConverter。估计得在这个上面转换一下。

8

了解一下默认不启用的SerializerFeature.WriteMapNullValue。

在fastjson里有这样一段,用来忽略null值。

if (value == null) {
    if (!SerializerFeature.isEnabled(out.features, features, SerializerFeature.WriteMapNullValue)) {
        continue;
    }
}

更多的内容可以见这篇CSDN的博客