Json用法三个常见错误2 Javabean Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethod
2017-04-25 10:41
543 查看
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(NewBeanInstanceStrate gy.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 |不允许 | 不允许
————————----------------------------------------------------------------------------------------------------------------------------------
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(NewBeanInstanceStrate gy.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 |不允许 | 不允许
————————----------------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- 【转载】Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
- java的date类型无法读取 出现错误net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- java.lang.ClassNotFoundException: net.sf.json.JSONArray错误
- hibernate Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
- Exception in thread "main" java.lang.IncompatibleClassChangeError: net/sf/cglib/core/DebuggingClassW
- Exception in thread "main" java.lang.NoClassDefFoundError: 错误
- Exception in thread "main" java.lang.NoClassDefFoundError错误信息
- "Exception in thread "main" java.lang.NoClassDefFoundError"错误的原因
- Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误的解决办法
- Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/helpers/NOPLoggerFactory"错误解决方
- net.sf.json.JSONException: java.lang.NoSuchMethodException
- java命令运行时错误(Exception in thread "main" java.lang.NoClassDefFoundError)
- Java转Json:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误的解决办法
- 【转】net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- 为什么会出现Exception in thread "main" java.lang.NoClassDefFoundError: welcome的错误?
- Exception in thread "main" java.lang.NoClassDefFoundError错误解决
- net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- Unable to find parent packages json-default 与java.lang.ClassNotFoundException: net.sf.ezmorph.Morphe
- 求助:java程序错误:exception in thread "main" java.lang.noclassdeffounderror:Test