最近在最一个项目,项目中涉及到 json字符串 转换成 java对象,其中遇到一个问题,在这里记录一下。
首先,我是按照下面博文的方式进行转的,地址如下:
https://www.cnblogs.com/teach/p/5791029.html
文中需要 json-lib 这个第三方jar包,我用了 Maven依赖,如下:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
下面我就直接贴代码了,我先写了一个实体类:
package cn.xljy.sport;
public class StepInfoList {
private String timestamp;
private String step;
public StepInfoList(String timestamp, String step) {
super();
this.timestamp = timestamp;
this.step = step;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getStep() {
return step;
}
public void setStep(String step) {
this.step = step;
}
@Override
public String toString() {
return "StepInfoList [timestamp=" + timestamp + ", step=" + step + "]";
}
}
看好了,这个实体类,写了一个有参构造函数,那么java就不会默认写无参构造了,这为下面遇到的问题,作了铺垫
接下来,我写了一个测试类,测试类如下:
package com.xljy.test.json;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.junit.Test;
import cn.xljy.sport.StepInfoList;
public class JsonTest {
@Test
public void test01(){
// String jsonTest = "{\"stepInfoList\":[{\"timestamp\":1532793600,\"step\":8648},{\"timestamp\":1532880000,\"step\":7045},{\"timestamp\":1535385600,\"step\":9349}],\"watermark\":{\"timestamp\":1535469794,\"appid\":\"wx89f43ca93b86739e\"}}";
String jsonTest = "{\"timestamp\":1532793600,\"step\":8648}";
System.out.println("jsonTest:"+jsonTest);
JSONObject jsonObj = JSONObject.fromObject(jsonTest);
StepInfoList info = (StepInfoList) JSONObject.toBean(jsonObj, StepInfoList.class);
System.out.println(info.toString());
}
}
这里的代码都很简单,我就不多说什么了,然后一运行,报错了,报 NoSuchMethodException 我就纳闷了,为什么,找了很多文章都没有解决问题,
具体错误如下:
如上图所示,他说没有init函数,我突然想到,我没写无参构造方法,是不是因为这个原因, 之后我把无参构造函数加上,果然就不报错了,开心。。
这里记录一下这个坑,一面以后再次犯错
不积跬步,无以至千里
不积小流,无以成江海