关于JavaDate数据返回到前端变数字的问题(并引申到前后端
时间的传输)
不知道为什么,前端显⽰的所有数据项都没有错,就只有时间那⼀项很奇怪,是⼀串数字,⽽且这个数字在数据库怎么都不到……
然后我在后端从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='iframe参数传递
+ edition.table.bootstrapTable('getSelections')[0].eTime,// 这⾥content是⼀个URL,如果你不想让iframe出现滚动条,你还可以content:['sentsin', '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;
$.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 (de == '0') {
layerTips.msg("删除成功!");
} 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传到后端去。
react iframe src变量
« 上一篇
vue3 iframe的用法
下一篇 »

发表评论