在java对象和json之间做转换的时候,json-lib组件,使用的是对象的getter/setter方法,即调用这些方法,不管这些getter/setter方法有没有对应的属性。因此,在做java对象与json之间的转换时候,除了属性的getter/setter方法,其他方法最好不要以get/set开头。
package cycle;
public class ComplexData
{
private String first;
public ComplexData()
{
}
public String getOne()
{
first = "123";
return first;
}
public void setOne(String str)
{
this.first = str;
}
public void setTestYes(String str)
{
System.out.println("json to java时候,会被调用");
}
public void setTestNot()
{
System.out.println("不符合set方法约束,没有参数,不会被调用");
}
public void getNotCall()
{
System.out.println("不会被调用,该方法虽然以get开头,但是没有返回值,不符合javabean约定");
}
public String getCanCall()
{
System.out.println("虽然不是获取属性方法,但是符合javabean约定,会被调用");
return null;
}
}
//测试代码
ComplexData comp = new ComplexData();
System.out.println(JSONObject.fromObject(comp));
String str = "{one:0,testYes:1,testNot:2}";
ComplexData after = (ComplexData) JSONObject.toBean(JSONObject.fromObject(str), ComplexData.class);
System.out.println(after.getOne());
程序执行结果:
虽然不是获取属性方法,但是符合javabean约定,会被调用
2013-7-4 21:36:46 net.sf.json.JSONObject defaultBeanProcessing
信息: Property 'testYes' of class cycle.ComplexData has no read method. SKIPPED
{"canCall":"","one":"123"}
json to java时候,会被调用
123
2013-7-4 21:36:46 net.sf.json.JSONObject toBean
警告: Tried to assign property testNot:java.lang.Integer to bean of class cycle.ComplexData