JAVA物件轉換為JSON時日期格式轉換處理
阿新 • • 發佈:2018-12-29
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日期格式轉換問題完美解決!!!