我使用的elasticSearch Server版本为2.3.3,java客户端为2.2.0, entity的注解如下。
@Field(type=FieldType.Date, format=DateFormat.date_optional_time,index= FieldIndex.not_analyzed)
private Date createTime;
报如下异常。
MapperParsingException[failed to parse [createTime]]; nested: IllegalArgumentException[Invalid format: "1477322607562" is malformed at "7562"];
"createTime" : {
"type" : "date",
"format" : "date_optional_time"
}
谷歌后发现,是jackson库在转换为json的时候,将Date类型转为为了long型的字符串表示,而我们定义的是date_optional_time格式的字符串,所以解析错误,具体的解决办法为:
1、去掉注解中的format=DateFormat.date_optional_time
让其使用默认的格式,也就是'strict_date_optional_time||epoch_millis',既能接受date_optional_time格式的,也能接受epoch_millis格式。
@Field(type=FieldType.Date, index= FieldIndex.not_analyzed)
private Date createTime;
"createTime" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
2、添加@JsonFormat注解
@Field(type=FieldType.Date, format=DateFormat.date_optional_time, index= FieldIndex.not_analyzed)
@JsonFormat (shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ssZ")
private Date createTime;
有了这个注解后,jackson库会将Date类型序列化成指定的格式,而不是long性的字符串表示
Posted in: ElasticSearch
Comments are closed.