今天在开发的时候遇到的问题:
由于需要调用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 {@Overridepublic Object processArrayValue(Object obj, JsonConfig jsonconfig) {return process(obj);}@Overridepublic 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自定义对象即可。