我有一个通用服务,该服务通过rest控制器返回数据-这是Repository
中的方法:
public List<Map<String, Object>> read(@NonNull final Table<?> table,
@NonNull final Collection<Field<?>> fields,
@NonNull final Collection<Condition> conditions,
@NonNull final Integer offset,
@NonNull final Integer limit,
final SortField<?> sortField) {
return dslContext
.select(fields)
.from(table)
.where(conditions)
.orderBy(sortField)
.offset(offset)
.limit(limit)
.fetchMaps();
}
返回的List<Map<String, Object>>
包含来自MySQL数据库的数据。问题出在datetime
字段中-在数据库中,我们不存储时区,但返回的Object
类型为Timestamp
,其类型为GregorianCalendar
,它为2018-07-05T00:00:00.000+0200
提供了值2018-07-05 00:00:00.000
(以db为单位)。它可能会添加默认时区(格林尼治标准时间+2)。
有没有一种方法可以简单地告诉jOOQ将db中的datetime
和date
字段从db转换为LocalDateTime
和LocalDate
而不是Timestamp
和{{1 }}?我知道它在下面使用了JDBC,问题可能在那里,但也许有解决此问题的聪明方法。
我可以在其他映射器中执行一些instanceOf检查,但想避免这样做,因为这会使代码更加困难,而instanceOf检查却很丑陋。
编辑: 使用jooq 3.9.5和Java 8。