alibaba / alibaba/fastjson2

[BUG] 更新到2.0.64后特定场景下key名含Type字段的也无法序列化

Open
#7,749 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

### 问题描述
更新到2.0.64后特定场景下key名含Type字段的也无法序列化

### 环境信息

```pom

com.squareup.okhttp3
okhttp-jvm
5.3.2

```

### 重现步骤

```java

import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import org.junit.jupiter.api.Test;

@Slf4j
public class FastjsonTest {

@Test
public void test() {

FormBody formBody = new FormBody.Builder()
.add("sourceType", "Test")
.build();
JSON.toJSONString(formBody);

}
}
```

### 期待的正确结果

正常序列化

### 相关日志输出
```
com.alibaba.fastjson2.JSONException: JSON#toJSONString cannot serialize 'okhttp3.FormBody@62656be4'

at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:3238)
at top.misec.fastjson2.FastjsonTest.test(FastjsonTest.java:20)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.NullPointerException: Cannot read the array length because "paramNames" is null
at com.alibaba.fastjson2.writer.ObjectWriterBaseModule$WriterAnnotationProcessor.getFieldInfo(ObjectWriterBaseModule.java:322)
at com.alibaba.fastjson2.writer.ObjectWriterProvider.getFieldInfo(ObjectWriterProvider.java:409)
at com.alibaba.fastjson2.writer.ObjectWriterCreator.createFieldWriter(ObjectWriterCreator.java:233)
at com.alibaba.fastjson2.writer.ObjectWriterCreatorASM.lambda$createObjectWriter$0(ObjectWriterCreatorASM.java:227)
at com.alibaba.fastjson2.util.BeanUtils.declaredFields(BeanUtils.java:347)
at com.alibaba.fastjson2.writer.ObjectWriterCreatorASM.createObjectWriter(ObjectWriterCreatorASM.java:223)
at com.alibaba.fastjson2.writer.ObjectWriterProvider.getObjectWriterInternal(ObjectWriterProvider.java:730)
at com.alibaba.fastjson2.writer.ObjectWriterProvider.getObjectWriter(ObjectWriterProvider.java:582)
at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:3228)
... 4 more

```

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the provided JUnit case with JSON.toJSONString and inspect ObjectWriterBaseModule.java, ObjectWriterProvider.java, and ObjectWriterCreator.java at the stack-trace locations. Trace why the FormBody field whose key contains Type produces a null paramNames value; done means the example serializes normally without the JSONException or NullPointerException.

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
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.