Apache Olingo OData 2.0 不支持 Java 8 LocalDatetime (java.time)

Posted

技术标签:

【中文标题】Apache Olingo OData 2.0 不支持 Java 8 LocalDatetime (java.time)【英文标题】:Apache Olingo OData 2.0 doesn't support Java 8 LocalDatetime (java.time) 【发布时间】:2022-01-02 01:35:00 【问题描述】:

我使用的是 Apache Olingo 版本号

olingo-odata2-core:2.0.11
olingo-odata2-jpa-processor-core:2.0.11
olingo-odata2-jpa-processor-ref:2.0.11

当我在 JPA 实体中使用 java.time.LocalDatetime 类型时,出现以下异常:-

Odata- JPA Type Converter: Type[class. java.time.LocalDateTime] not supported.

【问题讨论】:

【参考方案1】:

这是因为在文件 JPATypeConverter.java 第 91 行中,它的硬编码只接受以下内容

else if (jpaType.equals(Date.class) || jpaType.equals(Calendar.class) ||
        jpaType.equals(Timestamp.class) || jpaType.equals(java.util.Date.class))

我尝试使用XmlJavaTypeAdapter 使其接受LocalDateTime,它可以很好地获取值,但是在设置它时出错,因为在JPAEntity.java 第515 行中,如果参数类型是String,它只会选择XmlJavaTypeAdapter,也许这可以在 Olingo 代码中修复,或者我们可以在 JPATypeConverter 中添加 LocalDateTime 支持

虽然不确定这是否值得付出努力,因为我怀疑 Olingo 2 可能与 JPA 2 相关联,而 JPA 2 本身缺乏对 LocalDateTime 的支持。

最简单的解决方案是使用java.sql.Timestamp 或支持的类之一代替LocalDateTime

更难的解决方案是使用 Olingo 提出一个错误并在代码库中修复它

【讨论】:

以上是关于Apache Olingo OData 2.0 不支持 Java 8 LocalDatetime (java.time)的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 olingo odata V2 $filter 错误?

如何在 Java SpringBoot 项目中集成 Olingo(Odata)

Apache Olingo 4.2 API 抛出 java.lang.IllegalArgumentException

Olingo Odata v4 - 从模型生成类型、集合和元数据

$filter 在带有 MySQL 的 JPA/Olingo 2.0.11 中不起作用

快速搭建WebAPI(Odata+Code-First)附Odata条件查询表~