JSONObject.fromObject 日期类型转换问题
今天在开发的时候遇到的问题:
由于需要调用rest服务,所以将dto对象转换为JSON的时候出现了日期格式不正确的问题:
首先查看接收的DTO:
由于接口需要以数组的方式传输: JSONArray jsonArray = array.fromObject ( Arrays.asList ( esbDto ) );
在日志中查看转化之后的json:
[
{
"applyType": "INJURE",
"address": "",
"accountName": "XXX",
"injuryType": "DISABILITY",
"receiveOtherMoney": 0,
"costAmount": 12333,
"description": "开发测试",
"bankName": "中行",
"treatmentList": [
],
"recordId": 1903011404540000,
"fundingEmployeeCode": "3594",
"phoneNumber": "13344444444",
"createdBy": "3594",
"fundingEmployeeName": "XXX",
"happenDate": {
"date": 5,
"hours": 0,
"seconds": 0,
"month": 2,
"timezoneOffset": -480,
"year": 119,
"minutes": 0,
"time": 1551715200000,
"day": 2
},
"selfpayingAmount": 12333,
"appliedBy": "00003594",
"familyLossAmount": 0,
"applyDate": {
"date": 1,
"hours": 14,
"seconds": 54,
"month": 2,
"timezoneOffset": -480,
"year": 119,
"minutes": 4,
"time": 1551420294418,
"day": 5
},
"relationship": "本人",
"account": "513123124123123123",
"familyMemberName": "XXX"
}
]
可以很明显的看到两个日期对象不是我们想要的YYYY-MM-dd类型,
所以,很明显我们需要自己写一个转化器:
public class JsonDateValueProcessor implements JsonValueProcessor {
@Override
public Object processArrayValue(Object obj, JsonConfig jsonconfig) {
return process(obj);
}
@Override
public Object processObjectValue(String s, Object obj, JsonConfig jsonconfig) {
return process(obj);
}
private Object process(Object obj) {
if (obj == null) {// 如果时间为null,则返回空字串
return "";
}
if (obj instanceof Date) {
obj = new java.util.Date(((Date) obj).getTime());
}
if (obj instanceof java.util.Date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",
Locale.CHINA);// 格式化时间为yyyy-MM-dd类型
return sdf.format(obj);
} else {
return new Object();
}
}
}
然后将其注册到jsonConfig中:
//2.json 包装
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,
new JsonDateValueProcessor());// 注入处理Date类
JSONArray jsonArray = array.fromObject ( Arrays.asList ( esbDto ),jsonConfig );
再来查看一下日志:
[
{
"applyType": "INJURE",
"address": "",
"accountName": "XXX",
"injuryType": "DISABILITY",
"receiveOtherMoney": 0,
"costAmount": 12333,
"description": "开发测试",
"bankName": "中行",
"treatmentList": [
],
"recordId": 1903011413540000,
"fundingEmployeeCode": "3594",
"phoneNumber": "13344444444",
"createdBy": "3594",
"fundingEmployeeName": "XXX",
"happenDate": "2019-03-05",
"selfpayingAmount": 12333,
"appliedBy": "00003594",
"familyLossAmount": 0,
"applyDate": "2019-03-01",
"relationship": "本人",
"account": "513123124123123123",
"familyMemberName": "XXX"
}
]
日期格式类型变成了我们想要的类型。
总结来说就是转换json的时候自己自定义一个日期处理类实现JsonValueProcessor接口,在实现类中进行自定义转化,
最后将其注入JsonConfig中,调用fromObject 时传入JsonConfig自定义对象即可。