[BUG] [SupportSmartMatch] 使用JSON.to或者JSONObject.getObject JSONObject.getObject时;全小写的字段名不生效
- Dominant language
- Java
- Stars
- 4.4k
- Forks
- 613
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 6
Description
### 问题描述
使用JSON.to或者JSONObject.getObject JSONObject.getObject时;全小写的字段名不生效
涉及api:
com.alibaba.fastjson2.JSONObject#getObject(java.lang.String, java.lang.Class, com.alibaba.fastjson2.JSONReader.Feature...)
com.alibaba.fastjson2.JSON#to
### 环境信息
- OS信息: Win11
- JDK信息: 1.8
- 版本信息:Fastjson2 2.0.53
### 重现步骤
```java
import java.util.Map;
import org.assertj.core.api.Assertions;
import org.junit.Before;
import org.junit.Test;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONReader;
import lombok.Data;
public class ObjToBeanFeatureTest {
@Before
public void setUp() throws Exception {
JSON.config(JSONReader.Feature.SupportSmartMatch, false);
}
@Test
public void allLowerCaseFieldObjToBean() {
// 全小写 有问题
String text = "{\"appid\":\"com.xxx.xxx\"}";
// 全局设置智能匹配, 反序列化没问题
JSON.config(JSONReader.Feature.SupportSmartMatch, true);
Bean bean2 = JSON.parseObject(text, Bean.class);
Assertions.assertThat(bean2.appID).isEqualTo("com.xxx.xxx");
Map jsonObject = JSON.parseObject(text);
Assertions.assertThat(jsonObject.get("appid")).isEqualTo("com.xxx.xxx");
JSONObject obj = new JSONObject();
obj.put("v1", jsonObject);
// 传 Feature,两个API均无法正确反序列化
Bean bean3 = obj.getObject("v1", Bean.class, JSONReader.Feature.SupportSmartMatch);
Assertions.assertThat(bean3.appID).isEqualTo(null);
Bean bean4 = JSON.to(Bean.class, jsonObject);
Assertions.assertThat(bean4.appID).isEqualTo(null);
}
@Data
private static class Bean {
private String appID;
}
}
```
### 期待的正确结果
期望与反序列化API的处理方式保持一致
Contributor guide
Research direction
Start with the ObjToBeanFeatureTest reproducer and inspect the JSON.to and JSONObject#getObject entry points, comparing their handling with JSON.parseObject when SupportSmartMatch is enabled. The fix is complete when the all-lowercase "appid" field populates Bean.appID consistently and the reproducer assertions pass.
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
- Mostly clear
- Newbie friendliness
- 55/100