您的位置:首页 > Web前端 > JavaScript

Json用法三个常见错误

2011-11-03 22:54 232 查看
 1 JavaBean必须有一个无参构造器,否则抛异常:

  

  Mm mm = new Mm(1,"1");

  mm.setX(0);

  mm.setY("fujian");

  JSONObject fromObject = JSONObject.fromObject(mm);

  Object bean = JSONObject.toBean(fromObject,Mm.class);

  System.out.println((Mm)bean);

Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: com.cisco.learning.Mm.<init>()

 at net.sf.json.JSONObject.toBean(JSONObject.java:308)

 at net.sf.json.JSONObject.toBean(JSONObject.java:253)

 at com.cisco.learning.JavaBeanTest.main(JavaBeanTest.java:14)

Caused by: java.lang.NoSuchMethodException: com.cisco.learning.Mm.<init>()

 at java.lang.Class.getConstructor0(Unknown Source)

 at java.lang.Class.getDeclaredConstructor(Unknown Source)

 at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)

 at net.sf.json.JSONObject.toBean(JSONObject.java:302)

 ... 2 more

 

2 Javabean

Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: Property 'name' has no getter method

解决:声明bean为public class xxx,必须是public,我用默认类型(class xxx)都不行

 

3 必须有GET/SET,同时可以权限有访问;

 

 

JavaBean规范

(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public  ,如: public class user{......}

(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器

(3)一个javaBean类不应有公共实例变量,类变量都为private  ,如: private int id;

(4)属性应该通过一组存取方法(getXxx 和 setXxx)来访问,一般是IDE(Eclipse、JBuilder) 为属性生成getter/setter 方法

一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。

但是,还有一些特殊情况:

1、如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。

2、如果前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。

3、如果首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。

所以在JavaBean命名时应该注意符合以上命名规范。

附下表,看看吧:

————————————————————————————————————————————————————————

属性名/类型                    |                       getter 方法              |                    setter 方法 

————————————|——————————————————|——————————————————————————

xcoordinate/Double     | public Double getXcoordinate()     | public void setXcoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

xCoordinate/Double    | public Double getxCoordinate()     |public void setxCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

XCoordinate/Double    |public Double getXCoordinate()     | public void setXCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

Xcoordinate/Double     |不允许                                             |    不允许

————————————|——————————————————|——————————————————————————
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息