[BUG] 更新到2.0.64后特定场景下key名含Type字段的也无法序列化
- 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
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