最近准备把一个APP对应的SDK工具的HTTP请求实现方式由Jersey换成HttpClient(现在已经叫做Http Component Client),需要发HTTP Request的时候把对象转换为json,接受HTTP Response的时候再把json转为对象。
我们知道JAVA世界里面主流的JSON转换工具有Jackson,Gson,当然还有我们阿里的fastjson。
其中Jackson算是用的最古老也是应用相当广泛的一种,并且跟SpringBoot高度集成,可以通过SpringBoot的配置文件(profile)直接设置一些属性,非常的方便。
而由于SDK是提供给调用某个APP的工具JAR包,本身不具备独立运行的能力,所以没有导入SpringBoot。
因此考虑使用Gson,顺便学习一下。
一般来写代码来实现我们的需求的过程中都不是一帆风顺,果然这次也不例外。
不过不慌,遇到问题说明学习进步的时候到了,让我们看看这次都碰到了哪些问题。
public static void main(String[] args){
java.sql.Timestamp time = new Timestamp(System.currentTimeMillis());
Gson gson = new GsonBuilder().create();
System.out.println(time.equals(gson.fromJson(gson.toJson(time),
java.sql.Timestamp.class)));
}
我们考虑上面的代码输出什么,希望是输出true,结果是false。
那么是怎么一回事,调试后一看,原来gson转化的日期数据丢失了毫秒。
抱着严谨的态度调查了一下,原来Gson默认使用yyyy-MM-dd HH:mm:ss的format来进行解析,那我们可以改变这个format吗,答案是可以的。
public static void main(String[] args){
java.sql.Timestamp time = new Timestamp(System.currentTimeMillis());
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
System.out.println(time.equals(gson.fromJson(gson.toJson(time),
java.sql.Timestamp.class)));
}
使用“.SSS”表示三位毫秒。
原文:https://www.cnblogs.com/Lucifer-Jiang/p/14783350.html