当我运行 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'
但没有成功。
如何解决这个问题?
以下代码是我的 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/