关于JavaDate数据返回到前端变数字的问题
Posted 汪神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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=\' + 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传到后端去。
以上是关于关于JavaDate数据返回到前端变数字的问题的主要内容,如果未能解决你的问题,请参考以下文章
微信小程序----关于变量对象data 和 前端wxml取后台js变量值
微信小程序----关于变量对象data 和 前端wxml取后台js变量值