有时项目中会遇到这样的场景:
实体类需要转换成json,然后传给前台或者其他项目里,如果实体类里包含java.util.Date类型的属性,转换后,会变成这样(如果没做任何处理)
"receiveTime": {
"date": 23,
"day": 1,
"hours": 17,
"minutes": 51,
"month": 4,
"seconds": 21,
"time": 1463997081061,
"timezoneOffset": -480,
"year": 116
}
然而实体类里又不想把日期类型的属性改成字符串类型,我们可以写一个方法,来实现这一功能
public class JsonDateValueProcessor implements JsonValueProcessor {
private String format = DateUtils.defaultDateTimeFormat;
@Override
public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}
@Override
public Object processObjectValue(String arg0, Object value, JsonConfig config) {
return process(value);
}
private Object process(Object value){
//遇到类型为日期的,就自动转换成“yyyy-MM-dd HH:mm:ss”格式的字符串
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.UK);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
}
实体类需要转换的地方
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class , new JsonDateValueProcessor());
JSONObject signalJson = JSONObject.fromObject(signal,jsonConfig);
这样就完美的解决了问题
结果如下:
"receiveTime": "2016-05-23 18:15:06"