Java, 原创

ElasticSearch里日期格式问题

在使用Instant日期格式的时候偶尔会遇到日期格式问题,转换不了, 比如报错

Failed to convert from type [java.lang.String] to type [java.time.Instant] for value '2021-11-29T09:35:22.000+08:00'; nested exception is java.time.format.DateTimeParseException: Text '2021-11-29T09:35:22.000+08:00' could not be parsed at index 23

ES中的数据格式是

      "resideTime" : "2021-09-01T00:00:00.000+08:00",

因为查询的是ES, 所以在定义日期字段的时候加了注解:

import org.springframework.data.elasticsearch.annotations.Field;
import com.fasterxml.jackson.annotation.JsonFormat;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "uuuu-MM-dd'T'HH:mm:ss.SSSXXX")
//@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Instant resideTime;             // 入住时间

本地试Windows 10 ,Debug正确返回了, 发布到沙盒就报 String 转 Instant的错误,沙盒和本地连的同一个ES库, 这个问题就很尴尬, 目前还没有解决, 后期找到原因回来更新。

————————————————————————-

排查了下, 发版是 java版本问题, 本地使用 jdk15没有问题, 线上jdk11有问题。

那如果要适配jdk11怎么解决的呢?

检查是否子DO里面定义的字段已经在父DO里已经定义过了, 这里不能使用继承并设置@Field属性, 直接将父DO里面定义的字段考到子DO里面来,不要继承原DO了。、

原因分析:应该是系统调用反射时使用了父DO里面的字段, 子DO定义的@Field字段没有生效。

(679)

Related Post