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 - 从模型生成类型、集合和元数据