PS→无奈:受思深处宜先退,得意浓时便可休。
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天在返回json对象到前端时发现前端接收到的数据里面的时间格式被拆开了,原因如下:
默认JSON对DATE类型会转换成一个多属性对象, 而不是单独的一个字符串, 在某些应用处理上不是很方便, 可以利用JsonValueProcessor来实现日期的转换.
默认格式:
"createDate":{"nanos":0
,"time":1371721834000
,"minutes":50
,"seconds":34
,"hours":17
,"month":5
,"year":113
,"timezoneOffset":-480,"day":4
,"date":20
},
此格式当然不是我们前端要展示的格式,所以我找各种方法解决了一下,引框架包含了hibernate,因此特记录一下。
转换之后的格式:"createDate":"2013-06-20 17:50:34"
后台直接以此返回数据的话,后台会报数据转换错误:
SurveyDirectory survey=surveyDirectoryManager.getSurvey(id);
JSONObject jsonObject=JSONObject.fromObject(survey);
response.getWriter().println(jsonObject.toString());
解决办法:使用hibernate延时加载 设置
JsonConfig cfg = new JsonConfig();
cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
时间格式问题解决方案:转换时间格式
1.首先要在项目里新增一个DateJsonValueProcessor类:
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* JSON日期格式转换
*
*/
public class DateJsonValueProcessor implements JsonValueProcessor
{
private String format = "yyyy-MM-dd HH:mm:ss";
public DateJsonValueProcessor()
{
}
public DateJsonValueProcessor(String format)
{
this.format = format;
}
public Object processArrayValue(Object value, JsonConfig jsonConfig)
{
String[] obj = {};
if (value instanceof Date[])
{
SimpleDateFormat sf = new SimpleDateFormat(format);
Date[] dates = (Date[]) value;
obj = new String[dates.length];
for (int i = 0; i < dates.length; i++)
{
obj[i] = sf.format(dates[i]);
}
}
return obj;
}
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig)
{
if (value instanceof Date)
{
String str = new SimpleDateFormat(format).format((Date) value);
return str;
}
return value;
}
public String getFormat()
{
return format;
}
public void setFormat(String format)
{
this.format = format;
}
}
2.其次在需要调用的方法里面使用如下代码
cfg.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
JSONObject jsonObject=JSONObject.fromObject(survey,cfg);
response.getWriter().println(jsonObject.toString());
最终解决问题方案如下案例:
@ResponseBody
@RequestMapping(value = "/my-survey!attrs")
public String attrs(@RequestParam("id")String id) throws Exception {
HttpServletResponse response=SpringUtils.getResponse();
response.setCharacterEncoding("UTF-8");
try{
SurveyDirectory survey=surveyDirectoryManager.getSurvey(id);
JsonConfig cfg = new JsonConfig();
cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
cfg.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
JSONObject jsonObject=JSONObject.fromObject(survey,cfg);
response.getWriter().println(jsonObject.toString());
}catch(Exception e){
e.printStackTrace();
}
return null;
}
至此JSON日期格式转换问题完美解决!!!