项目中需要将一个含有属性为Date
类型的对象转换为json
字符串,利用dubbo
提供的接口将该数据保存到某系统中。在数据库查询数据发现插入的日期有问题(插入的是当前时间而不是指定时间)。
利用json-lib.jar
测试发现,利用json
对象将普通对象转换为json
字符串后再转换为原始对象,日期是正常的(未被修改),分析接口调用方、接口提供方代码发现,两边的使用的json jar
不一致导致。接口调用方使用的是com.google.gson.Gson
,而接口提供方解析json
字符串时使用的是net.sf.json.JSONObject
。
接口调用方使用net.sf.json.JSONObject
将对象转换为json
字符串,问题解决。
测试代码
import java.util.Date;
public class Person {
private String name;
private Date birthDate;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import com.google.gson.Gson;
import net.sf.json.JSONObject;
public class JSONTest {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2017-1-1";
Person person = new Person();
person.setAge(10);
person.setName("张飞");
person.setBirthDate(sdf.parse(strDate));
JSONObject json = JSONObject.fromObject(person);
String jsonStr = json.toString();
// String jsonStr = new Gson().toJson(person);
JSONObject obj = JSONObject.fromObject((Object)jsonStr);
Person p = (Person)JSONObject.toBean(obj, Person.class);
System.out.println(sdf.format(p.getBirthDate()));
}
}