java - Spring Boot 和 ElasticSearch 文档中日期转换异常

标签 java spring-boot elasticsearch spring-data-elasticsearch spring-repositories

当我运行 Spring Boot 代码(带有 ElasticSearch)时,出现错误。

我想列出我的elasticsearch车辆文档中所有存在的元素

org.springframework.data.elasticsearch.core.convert.ConversionException: Unable to convert value '2022-01-01' to java.util.Date for property 'created'

我试过thisthis链接。

但没有成功。

如何解决这个问题?

以下代码是我的 Vehicle 类。

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = Indicies.VEHICLE_INDEX)
public class Vehicle {

@Id
@Field(type = FieldType.Keyword)
private String id;

@Field(type = FieldType.Text)
private String number;

@Field(type = FieldType.Text)
private String name;

@Field(type = FieldType.Date, format = DateFormat.date, pattern = "yyyy-MM-dd'T'HH:mm:ssz")
private Date created;

}

以下接口(interface)是我的VehicleRepository接口(interface)

public interface VehicleRepository extends ElasticsearchRepository<Vehicle, String> {

    Page<Vehicle> findAll();

}

以下代码是我的 getList 服务方法

    public List<Vehicle> getVehicleList() {
        return vehicleRepository.findAll().getContent();
    }

以下代码是我的车辆 Controller 端点

    private final VehicleService vehicleService;

    @GetMapping("/vehicle-list")
    public List<Vehicle> getVehicleList() {
        return vehicleService.getVehicleList();
    }

最佳答案

存储在索引中的日期似乎是本地日期(“2022-01-01”,无时区,无时间戳)。 java.util.Date 是 UTC 时区的即时时间。您无法将仅日期字符串转换为日期。您的模式字符串包含的时间也与该字符串不匹配。

并且不要使用古老的 java.util.Date 类,而是使用自 Java 8 以来可用的 java.time 包中的类。

你应该使用

@Field(type = Date, format = DateFormat.date)
LocalDate created;

并重新创建索引以调整映射。

关于java - Spring Boot 和 ElasticSearch 文档中日期转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70840905/

相关文章:

java - Camel 在行动中 codehaus.mojo 插件错误

java - 从 Spring Boot 运行 mysqldump

elasticsearch - 范围过滤器-接受每个日期

http - 使用 CURL GET 发送数据

java - 第三方jar spring boot中的类文件内的@Value

Elasticsearch 高亮不高亮结果

java - 如何通过身份验证的Google服务帐户调用youtube API以在Java中生成 token

java - 如何从方法的输入生成 sql

java - 如何在 CentOS 中获取 java 路径?

java - URL 参数正在修改