fastjson2
fastjson2 copied to clipboard
[BUG] @JSONField with unwrapped on set/get
问题描述
Fastjson中的@JSONField with unwrapped 异常,compared with fastjson2.
环境信息
- OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
- JDK信息: [Openjdk 17.0.6]
- 版本信息:[Fastjson 2.0.49/2.0.50-SNAPSHOT]
重现步骤
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONPath;
import com.alibaba.fastjson2.annotation.JSONField;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MutatedIssue897_44 {
@Test
public void test() {
String json = "{\"name\": \"zhangsan\", \"age\": 18}";
People p = JSON.parseObject(json, People.class);
assertEquals("zhangsan", p.getName());
assertEquals(18, p.getExtra().get("age"));
JSONPath.set(p, "$.age", 20);
assertEquals(20, p.getExtra().get("age"));
}
static class People {
private String name;
private Map<String, Object> extra = new HashMap<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, Object> getExtra() {
return extra;
}
public void setExtra(Map<String, Object> extra) {
this.extra = extra;
}
@JSONField(unwrapped = true)
public void set(String key, Object value) {
this.extra.put(key, value);
}
@JSONField(unwrapped = true)
public Object get(String key) {
return this.extra.get(key);
}
}
@Test
public void testfj() {
String json = "{\"name\": \"zhangsan\", \"age\": 18}";
People1 p = com.alibaba.fastjson.JSON.parseObject(json, People1.class);
assertEquals("zhangsan", p.getName());
assertEquals(18, p.getExtra().get("age"));
com.alibaba.fastjson.JSONPath.set(p, "$.age", 20);
assertEquals(20, p.getExtra().get("age"));
}
static class People1 {
private String name;
private Map<String, Object> extra = new HashMap<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, Object> getExtra() {
return extra;
}
public void setExtra(Map<String, Object> extra) {
this.extra = extra;
}
@com.alibaba.fastjson.annotation.JSONField(unwrapped = true)
public void set(String key, Object value) {
this.extra.put(key, value);
}
@com.alibaba.fastjson.annotation.JSONField(unwrapped = true)
public Object get(String key) {
return this.extra.get(key);
}
}
}
期待的正确结果
正常解析
相关日志输出
Expected :18 Actual :null