alibaba / alibaba/fastjson2

[BUG]当对象的字段是复杂对象且值为空时,WriteNulls会导致NullPointerException

Open
#3,830 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
4.4k
Forks
613
Avg merge
1d 22h
Merged PRs (30d)
6

Description

### 问题描述
* 当对象的字段是复杂对象且值为空时,WriteNulls会导致NullPointerException

### 环境信息
*请填写以下信息:*

- JDK信息: [e.g.:Openjdk 1.8.0_312]
- 版本信息:[e.g.:Fastjson2 2.0.59]

### 重现步骤

1. User对象下有Address对象字段
2. address字段值置为空
3. 调用JSONObject.from(user, JSONWriter.Feature.WriteNulls)
```java
import java.util.Date;
import java.util.LinkedHashMap;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;

public class FastJson2Test {

public static void main(String[] args) {
User user = new User();
user.setId("U00001");
user.setRealName("Foo");
user.setCreateTime(new Date());
JSONObject json = JSONObject.from(user, JSONWriter.Feature.WriteNulls);
System.out.println(new LinkedHashMap<>(json));
}

@Data
protected static class User {
private String id;
private String realName;
private String remark;
private Address address;
private Date createTime;
}

@Data
protected static class Address {
private String id;
private String city;
}
}
```

### 相关日志输出
Exception in thread "main" java.lang.NullPointerException
at com.alibaba.fastjson2.writer.FieldWriterStringFunc.getFieldValue(FieldWriterStringFunc.java:36)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.toJSONObject(ObjectWriterAdapter.java:618)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.toJSONObject(ObjectWriterAdapter.java:610)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.toJSONObject(ObjectWriterAdapter.java:691)
at com.alibaba.fastjson2.JSON.toJSON(JSON.java:4027)
at com.alibaba.fastjson2.JSONObject.from(JSONObject.java:2259)
at FastJson2Test.main(FastJson2Test.java:14)

Contributor guide

Open the contributing guide

Research direction

Reproduce the supplied User and Address example with JSONObject.from and JSONWriter.Feature.WriteNulls, then start at com.alibaba.fastjson2.writer.FieldWriterStringFunc.java:36 and the ObjectWriterAdapter.toJSONObject calls in the stack trace. Done means converting a User whose nested address is null completes without a NullPointerException and preserves the requested null-field behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.