特别申明:
本文初衷是技术分享,部分解决方法来自两位大佬的文章,均在文中赋对应原文网址。感谢大佬的分享。
1. 问题描述:
需求:
需要将实体类中的数据加入到ElasticSearch中,并且其中java类中有Date类型的对象,ElasticSearch对应的属性也是Date类型。
现在要求将Date类型属性在ElasticSearch中,
以 date类型属性judgementDate以"yyyy-MM-dd"格式存储
date类型属性createTime以"yyyy/MM/dd HH:mm:ss"格式存储
问题展现:
属性judgementDate是Date类型的,然后赋值"2016-6-19"
属性createTime是Date类型的,赋值当前时间
按道理说用fastjson转化为对应相同内容的字符串类型对象。
但是实际打印出来的两个属性均是一串数字:
createTime也被转化成为 Long 类型 对象。
2. 解释现象:
date类型被fastjson变为long类型一串数字
在map转换fastjson时date类型问题
map.put(“entity”,JSON.parseObject(JSON.toJSONString(stkChkModel)));
map中的date类型会被转为long类型的一长串数字。
fastjson会默认把date类型传唤为long。
3. 解决办法:
原文链接:
在实体的属性上加注解@JSONField(format = “yyyy-MM-dd”)
@JSONField(format = “yyyy/MM/dd HH:mm:ss”)
private Date updateTime;
ElasticSearch构建索引时,需要把日期字段的类型设置为date类型。并且要设置格式化format。
date 的格式类型必须是 4种类型
注意:如果写 2015-03-01 12:00:00 这是格式是无效的。 必须是y/m/d ,带斜杠的
原文链接
设置操作: