關於@JSONField(format = "yyyy-mm-dd hh:mm:ss")的一點疑問

背景:因爲數據庫中存的時間相關的字段都是date類型的

Date day = new Date();
params.setFdCreateTime(day);

類似於這樣通過實體映射存到數據庫中

但是前臺返回json的時候可能就是下圖這樣的,肯定是不友好的,前臺如果要展示的話肯定還要遍歷再formate一下

如果要很好的解決上述問題,需要通過alibaba.fastjson的@JSONField(format = "yyyy-mm-dd hh:mm:ss")的註解

但是在代碼實現過程中發現,雖然都加了這個註解,但是有的返回的是經過formate之後的理想數據,有的確實原始數據,讓我真的很無解

然後我就仔細追查對比代碼,才發現

能夠正常返回formate數據的是map裏邊直接放了一個查詢結果list(list裏含有date類型的數據)

        @RequestMapping(value = "/detail", method = RequestMethod.POST)
	public Object showDetail(HttpServletRequest httpServletRequest,@RequestBody Map<String,Object> params) {
		Map<String, Object> result = courseService.detailMap(params);
		return Result.ok(result,"查詢成功");
	}
	

postman對應的接口返回的數據如下

而返回原始數據的是json裏邊放的是一個經過json轉化的list

public Object getCurriculum(HttpServletRequest httpServletRequest,@RequestBody Map<String,Object> params) {
		//checkToken(httpServletRequest, parentsService);
		List<Map<String, Object>> result = courseService.getCurriculum(params);
		JSONObject json = new JSONObject();
		json.put("list", JSONArray.parseArray(JSON.toJSONString(result)));
		return Result.ok(json,"查詢成功");
	}

postman對應的接口返回的數據如下

後來把返回原始數據的代碼改成map放list

@RequestMapping(value = "/getCurriculum", method = RequestMethod.POST)
	public Object getCurriculum(HttpServletRequest httpServletRequest,@RequestBody Map<String,Object> params) {
		Map<String, Object> map = courseService.getCurriculum(params);
		return Result.ok(map,"查詢成功");
	}
	

serviceImpl中的代碼

public Map<String, Object> getCurriculum(Map<String, Object> params) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("list",classCurriculumDao.selectByClassId(params));
		return map;
	}

postman返回數據:

但是也不難發現,經過json轉化的list只顯示不爲空的字段,而直接map裏邊放list的是隻有數據表的屬性不管有沒有值都會返回

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章