1.2.47升级到1.2.60版本以后,代码中JSON.toJavaObject(jsonojbect, Bean.class); 如果Bean中属性有Set方法则Set方法没有执行,1.2.47版本没有问题,1.2.60版本出现问题,相应的getObject方法也会出现这样的问题,其他版本没有尝试
@DaTa
public class FastJson {
private String lasttime;
private String nums;
public String getLasttime() {
return lasttime;
}
public void setLasttime(String lasttime) {
System.out.println("1123123");
this.lasttime = lasttime;
}
}
//FastJson fastJson = new FastJson();
// fastJson.setLasttime("12312555");
// fastJson.setNums("123");
// JSONObject jsobj = JSON.parseObject(JSON.toJSONString(fastJson));
//String string1 = JSON.toJSONString(fastJson);
//System.out.println(string1);
String string = "{\"lasttime\":\"12312\",\"nums\":\"123\"}";
JSONObject jsobj = JSON.parseObject(string);
FastJson fj = JSON.toJavaObject(jsobj, FastJson.class);
System.out.println(fj);
3条答案
按热度按时间js5cn81o1#
原因是从1.2.57开始,
JavaBeanDeserializer
类中的createInstance()
方法逻辑发生了变化,从这个版本之后,当属性值不为null时,会直接使用field.set()
的方式为属性设置值。而不是像1.2.57之前,使用method.invoke()
的方式调用set方法为属性设置值。个人猜测与1.2.57版本说明中的
有关。
如果想走set方法里的逻辑可以使用
JSON.parseObject()
方法ygya80vv2#
同样遇到了这个困扰,使用 JSON,parseObject 的确是会执行,但是当Json字符串复杂的时候,需要先转JSONObject,再根据Key转Bean就不行了,影响了我司很多应用系统的代码。
c9x0cxw03#
@wenshao 烦请看一下,我司也有和 @WindyDovs 类似的使用场景,获取到数据之后都已经转了 JSONObject,还要再 toJSONString 再用 parseObject 才能正常调用类里某些字段的 @JSONFiled 里的一些配置,这样也太兜圈了