Spring MVC自定義日期類型轉(zhuǎn)換器實(shí)例詳解
Spring MVC自定義日期類型轉(zhuǎn)換器實(shí)例詳解
WEB層采用Spring MVC框架,將查詢到的數(shù)據(jù)傳遞給APP端或客戶端,這沒啥,但是坑的是實(shí)體類中有日期類型的屬性,但是你必須提前格式化好之后返回給它們。說真的,以前真沒這樣做過,之前都是一口氣查詢到數(shù)據(jù),然后在jsp頁(yè)面上格式化,最后展示給用戶。但是這次不同,這次我純屬操作數(shù)據(jù),沒有頁(yè)面。直接從數(shù)據(jù)庫(kù)拿數(shù)據(jù)給它們返數(shù)據(jù)、它們給我傳數(shù)據(jù)我持久化數(shù)據(jù),說到這里一個(gè)小問題就默默的來(lái)了。
首先把問題還原一下吧(這是一個(gè)數(shù)據(jù)導(dǎo)出功能),下圖中用紅框圈起來(lái)的都是直接從數(shù)據(jù)庫(kù)中拿到的數(shù)據(jù),但是不幸的是它們的對(duì)象中都包含日期類型的屬性,然后我直接使用com.alibaba.fastjson.JSONObject將其轉(zhuǎn)成json串返回給APP端和客戶端,但是他們拿到的數(shù)據(jù)中時(shí)間類型的值都是時(shí)間戳,很不人性化,我也覺的很不人性化,就答應(yīng)給他們格式化一下,不料,問題來(lái)了,格式化好之后然后又設(shè)置進(jìn)去,結(jié)果是沒用,沒用,沒用,重要的事情說三遍!
解決上面出現(xiàn)的問題,格式化對(duì)象中的日期類型的屬性值,然后返回給請(qǐng)求者。記?。哼@個(gè)動(dòng)作是在服務(wù)器端完成,并且實(shí)體類和數(shù)據(jù)表中的類型也都不變,照樣是日期類型的。
第一步:首先自定義一個(gè)日期類型轉(zhuǎn)換器(附代碼)
package com.tgsit.cjd.utils; /** * 日期類型轉(zhuǎn)換器: * 自動(dòng)格式化對(duì)象中的日期類型 */ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; public class JsonDateValueProcessor implements JsonValueProcessor{ private String format ="yyyy-MM-dd"; public JsonDateValueProcessor() { super(); } public JsonDateValueProcessor(String format) { super(); this.format = format; } @Override public Object processArrayValue(Object paramObject, JsonConfig paramJsonConfig) { return process(paramObject); } @Override public Object processObjectValue(String paramString, Object paramObject, JsonConfig paramJsonConfig) { return process(paramObject); } private Object process(Object value){ if(value instanceof Date){ SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA); return sdf.format(value); } return value == null ? "" : value.toString(); } }
第二步:如果項(xiàng)目中沒有引入json-lib包,則引入
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
第三步:返回?cái)?shù)據(jù)之前先使用日期類型轉(zhuǎn)換器格式化日期數(shù)據(jù)
這里必須先創(chuàng)建JsonConfig對(duì)象,然后調(diào)用registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());方法將轉(zhuǎn)換器注入進(jìn)去,最后在調(diào)用JsonArray的formObject(數(shù)據(jù),new JsonConfig())方法進(jìn)行處理。
注意:這里還有個(gè)小坑,就是當(dāng)你處理的是單純的一個(gè)實(shí)體對(duì)象,則直接可以jsonObject.formObject(數(shù)據(jù),new JsonConfig());
但是你處理的一個(gè)list集合數(shù)據(jù)時(shí),則記得用jsonArray.formObject(數(shù)據(jù),new JsonConfig());否則報(bào)錯(cuò)。
@RequestMapping(value = "/exportInfo", method = RequestMethod.GET) @ResponseBody public String exportInfo(HttpServletResponse response) throws Exception{ List<QueryVo> exportInfoList = queryVoService.exportInfo(); if(exportInfoList != null && exportInfoList.size() > 0){ List<Object> result = new ArrayList<Object>(); JsonResult model = null; for (QueryVo queryVo : exportInfoList) { OwnerInfo ownerInfo = ownerInfoService.selectOwnerInfoByVIN(queryVo.getVin()); List<MortgagerInfo> morInfoList = mortgagerInfoService.selectByVIN(queryVo.getVin()); List<TransferInfo> traInfoList = transferInfoService.selectByVIN(queryVo.getVin()); model = new JsonResult(); model.setOwnerInfo(ownerInfo); model.setMortgagerInfo(morInfoList); model.setTransferInfo(traInfoList); result.add(model); } //調(diào)用自定義日期類型轉(zhuǎn)換器,自動(dòng)格式化對(duì)象中的日期類型的字段值 JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor()); return CGSConstants.returnJson(CGSConstants.SUCCESS,"導(dǎo)出成功",JSONArray.fromObject(result, jsonConfig)); } return CGSConstants.returnJson(CGSConstants.SUCCESS,"尚無(wú)數(shù)據(jù)",null); }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析
- 詳解SpringMVC的類型轉(zhuǎn)換及驗(yàn)證方法
- 詳解SpringMVC注解@initbinder解決類型轉(zhuǎn)換問題
- 解決springmvc關(guān)于前臺(tái)日期作為實(shí)體類對(duì)象參數(shù)類型轉(zhuǎn)換錯(cuò)誤的問題
- springMVC4之強(qiáng)大類型轉(zhuǎn)換器實(shí)例解析
- SpringMVC實(shí)現(xiàn)自定義類型轉(zhuǎn)換器
- SpringMVC對(duì)日期類型的轉(zhuǎn)換示例
- Springmvc自定義類型轉(zhuǎn)換器實(shí)現(xiàn)步驟
相關(guān)文章
jsp頁(yè)面調(diào)用applet實(shí)現(xiàn)人民幣的大小寫轉(zhuǎn)換
jsp頁(yè)面調(diào)用applet實(shí)現(xiàn)人民幣的大小寫轉(zhuǎn)換...2006-10-10java Lucene 中自定義排序的實(shí)現(xiàn)
使用Lucene來(lái)搜索內(nèi)容,搜索結(jié)果的顯示順序當(dāng)然是比較重要的.Lucene中Build-in的幾個(gè)排序定義在大多數(shù)情況下是不適合我們使用的.要適合自己的應(yīng)用程序的場(chǎng)景,就只能自定義排序功能,本節(jié)我們就來(lái)看看在Lucene中如何實(shí)現(xiàn)自定義排序功能.2008-12-12