fastjson 属性名中下划线和驼峰互转时的问题

cs7cruho  于 2021-11-27  发布在  Java
关注(0)|答案(1)|浏览(835)

#1089 中的问题在1.2.30版本中修复,但是发现在1.2.58版本中又出现了。
#1089

问题描述:
json串中有两个属性,名称为ab和a_b,差别是一个有下划线而另一个没有,当解析对象时,如果对象的定义中只有ab一个属性,则解析出来的对象中ab的值可能会是json串中a_b属性的值,解析成哪个值跟json串中ab和a_b的顺序有关:

@test
public void parseTest() {
String json = "{"ab":123,"a_b":456}";
TestBean tb = JSON.parseObject(json, TestBean.class);
Assert.assertEquals(123, tb.getAb());
}
private static class TestBean {
private int ab;
public int getAb() {
return ab;
}
public void setAb(int ab) {
this.ab = ab;
}
}
结果
java.lang.AssertionError: expected:<123> but was:<456>

测试在1.2.58中有此问题。

vwkv1x7d

vwkv1x7d1#

这个问题只能通过禁用掉自动属性匹配来规避

TestBean tb = JSON.parseObject(json, TestBean.class, Feature.DisableFieldSmartMatch);

原理可以参考https://blog.51cto.com/483181/1981575

相关问题