fastjson2
fastjson2 copied to clipboard
[BUG] JSONField的unwrapped问题
问题描述
类似#1158, fastjson 在@JSONField(unwrapped = true)在JSON.parseObject时 与fastjson2结果不同
环境信息
- OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
- JDK信息: [Openjdk 17.0.6]
- 版本信息:[Fastjson/Fastjson2 2.0.49]
重现步骤
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class Issue1158TestMutated_221 {
@Test
public void testMutated() {
StandardGetQry standardGetQry = new StandardGetQry();
StandardBaseModel standardBaseModel = new StandardBaseModel();
standardBaseModel.setCode("2");
standardBaseModel.setCategory("NEW_CALL_STATUS");
standardGetQry.setStandardBaseModel(standardBaseModel);
String jsonStr = JSON.toJSONString(standardGetQry);
assertEquals("{\"standardCategory\":\"NEW_CALL_STATUS\",\"standardCode\":\"2\"}", jsonStr);
StandardGetQry standardGetQry2 = JSON.parseObject(jsonStr, StandardGetQry.class);
assertEquals("{\"standardCategory\":\"NEW_CALL_STATUS\",\"standardCode\":\"2\"}", JSON.toJSONString(standardGetQry2));
}
@Data
public static class StandardGetQry {
/**
* 基础数据
*/
@JSONField(unwrapped = true)
private StandardBaseModel standardBaseModel;
}
@Data
public static class StandardBaseModel {
/**
* 逻辑编码-标准KEY
*/
@JSONField(name = "standardCode")
private String code;
/**
* 标准类别
*/
@JSONField(name = "standardCategory")
private String category;
}
@Test
public void testMutated1() {
StandardGetQry1 standardGetQry = new StandardGetQry1();
StandardBaseModel1 standardBaseModel = new StandardBaseModel1();
standardBaseModel.setCode("2");
standardBaseModel.setCategory("NEW_CALL_STATUS");
standardGetQry.setStandardBaseModel(standardBaseModel);
String jsonStr = com.alibaba.fastjson.JSON.toJSONString(standardGetQry);
assertEquals("{\"standardCategory\":\"NEW_CALL_STATUS\",\"standardCode\":\"2\"}", jsonStr);
StandardGetQry1 standardGetQry2 = com.alibaba.fastjson.JSON.parseObject(jsonStr, StandardGetQry1.class);
assertEquals("{\"standardCategory\":\"NEW_CALL_STATUS\",\"standardCode\":\"2\"}", com.alibaba.fastjson.JSON.toJSONString(standardGetQry2));
}
@Data
public static class StandardGetQry1 {
/**
* 基础数据
*/
@com.alibaba.fastjson.annotation.JSONField(unwrapped = true)
private StandardBaseModel1 standardBaseModel;
}
@Data
public static class StandardBaseModel1 {
/**
* 逻辑编码-标准KEY
*/
@com.alibaba.fastjson.annotation.JSONField(name = "standardCode")
private String code;
/**
* 标准类别
*/
@com.alibaba.fastjson.annotation.JSONField(name = "standardCategory")
private String category;
}
}
期待的正确结果
期望两者的处理结果应保持一致
相关日志输出
Expected :{"standardCategory":"NEW_CALL_STATUS","standardCode":"2"} Actual :{} at Issue1158TestMutated_221.testMutated1(Issue1158TestMutated_221.java:62)
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.50-SNAPSHOT/ 问题已修复,请帮忙用2.0.50-SNAPSHOT版本验证,2.0.50版本预计在5月12日前发布
经验证该样例无问题,#2551 似乎存在问题
https://github.com/alibaba/fastjson2/releases/tag/2.0.50 2.0.50已发布,请用新版本