不知道為什么,前端顯示的所有數據項都沒有錯,就只有時間那一項很奇怪,是一串數字,而且這個數字在數據庫怎么都找不到……

然后我在后端從service到controller都debug了一遍,發現數據都沒有錯,拿的都是時間啊。
后來百度知道,原來后台在返回json數據的時候,用自身的序列化機制會把時間變成一段很長的數字,就像上面的顯示一樣。
然后這里就要用到一個東西:
@JsonFormat,它的作用是,出參時,自動把Date型對象數據轉化成正確的格式化后的字符串出去

效果:

然后又通過度娘知道,還有個注解
@DateTimeFormat
這個是用於將前台傳到后台字符串變量轉換為Date類型。請求報文只需要傳入yyyymmddhhmmss字符串進來,則自動轉換為Date類型數據。(不過好像前端要傳的是json)
這里也有個小例子:
前端只傳了一個 格式正確的 時間字符串
layer.open({
type : 2,
title : '歸檔詳情',
//btn: ['選中', '取消'],
shade : false,
area : [ '900px', '600px' ],
maxmin : true,
content : gateUrl.UiUrl + '/productbaseEdition?eTime='
+ edition.table.bootstrapTable('getSelections')[0].eTime,// 這里content是一個URL,如果你不想讓iframe出現滾動條,你還可以content:['http://sentsin.com', 'no']
end : function() {
}
});
這里就只是在請求url那里拼接了一個 eTime上去。
然后后台一開始直接用Date接,毫無疑問,無法成功,然后就用了這個@DateTimeFormat
看后端代碼:
@Controller
@RequestMapping("")
public class ProductbaseEditionController extends BaseController {
@GetMapping("/productbaseEdition")
public String productbaseEdition(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")Date eTime) {
System.out.println("#################test time:"+eTime);
return "productbaseEdition/list";
}
}
接收成功!(這里不是json數據,然后用注解@JsonFormat似乎不能成功接收)
不過也有資料說,@JsonFormat不僅可以完成后台到前台參數傳遞的類型轉換,還可以實現前台到后台類型轉換。當content-type為application/json時,優先使用@JsonFormat的pattern進行類型轉換。而不會使用@DateTimeFormat進行類型轉換。
然后我也根據這個做了幾個實驗,
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") //@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date eTime;//歸檔時間,也是歸檔的版本號
這是實體里面的一個屬性,前端傳用json傳數據過來,然后Controller用這個實體來接收
var data = {};
data.id = edition.currentItem.id;
data.eTime = edition.currentItem.eTime;
layer.confirm('確定刪除這個歸檔版本嗎?', null, function (index) {
$.ajax({
url: edition.baseUrl + "/editionDelete",
type: "POST",
data:JSON.stringify(data),
headers : {
'Content-Type' : 'application/json;charset=utf-8'
},
success: function (data) {
console.log(data);
if (data.code == '0') {
layerTips.msg("刪除成功!");
edition.refresh();
} else {
layerTips.msg("刪除失敗!")
}
}
});
layer.close(index);
});
結論是:
1.前端如果傳來的是json數據,時間格式是正確的,那么@JsonFormat是可以正確將其轉換成Date類型的。
2.前端如果傳來的是json數據,時間格式是正確的,那么@DateTimeFormat是可以正確將其轉換成Date類型的。
3.但是,用json出參時用注解@DateTimeFormat似乎行不通,就是前面的問題,json返回Date對象時,java的序列化會把date變成一串數字,然后@dataTimeFormat似乎無法解決這個問題。
結論:
1.如果前后端傳的數據都是json,那么后台接數據,傳數據都可以用@JsonFormat。
2.@DateTimeFormat適合后端 接收 前端傳來的數據,不管是不是json都可以正確轉換成Date型數據,只要前端傳來的格式正確且后端@DateTimeFormat的pattern寫正確了,但是這個注解無法將Date型數據用json傳到后端去。

