alibaba / alibaba/fastjson2

[BUG] [SupportSmartMatch] 使用JSONObject.getObject 将JSONObject转为bean时;JSON.config全局设置的Feature.SupportSmartMatch不生效

Open
#3,181 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

### 问题描述
使用JSONObject.getObject 将JSONObject转为bean时;JSON.config全局设置的Feature.SupportSmartMatch不生效
涉及api:com.alibaba.fastjson2.JSONObject#getObject(java.lang.String, java.lang.Class)

### 环境信息
- 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 getObjectNoSupportGlobalConfig() {
String text = "{\"appId\":\"com.xxx.xxx\"}";

// 没有设置,无问题
Bean bean1 = JSON.parseObject(text, Bean.class);
Assertions.assertThat(bean1.appID).isEqualTo(null);

// 全局设置智能匹配
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,无法正确反序列化
Bean bean3 = obj.getObject("v1", Bean.class);
Assertions.assertThat(bean3.appID).isEqualTo(null);

// 传 Feature,可以正确反序列化
Bean bean4 = obj.getObject("v1", Bean.class, JSONReader.Feature.SupportSmartMatch);
Assertions.assertThat(bean4.appID).isEqualTo("com.xxx.xxx");
}
@Data
private static class Bean {
private String appID;
}
}
```

### 期待的正确结果
JSONObject.getObject 不传Feature 时,应该复用全局配置。

Contributor guide

Open the contributing guide

Research direction

Start with JSONObject#getObject(String, Class) and reproduce the behavior using the provided ObjToBeanFeatureTest scenario. Verify that calling getObject without an explicit Feature honors the global SupportSmartMatch setting, while the existing explicit-Feature case continues to pass.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.