一、问题描述
在web应用中,经常需要将java对象转为json进行数据传输,但当java对象中包含Date类型时,JSONObject.fromObject(javaBean);会将Date类型解析为json数组。这样会导致接收到数据后,使用JSONObject.parseObject(jsonObject.toString(), Obj.class);将json转为java对象时报错。
1、发送数据
JSONObject employee = JSONObject.fromObject(object);
HttpUtils.post(url,employee.toString())
2、接收数据
TbBizEmployee employee = JSONObject.parseObject(jsonObject.toString(), TbBizEmployee.class);
3、数据解析后回报如下错误:
JSONObject.parseObjectsyntax error, expect }, actual
二、解决方案
将java对象中的Date类型转成yyyy-MM-dd HH:mm:ss格式的字符串进行传输,收到后可之间转为Date对象,使用JsonConfig实现即可。
1、发送数据
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
/**
* 处理数组中的Date对象
*/
@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return o!=null?new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(o):null;
}
/**
* 处理单个Date对象
*/
@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return o!=null?new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(o):null;
}
});
JSONObject jsonObject = JSONObject.fromObject(employee,jsonConfig);
2、接收数据,直接转换成java对象
TbBizEmployee employee = JSONObject.parseObject(jsonObject.toString(), TbBizEmployee.class);