我有jooq个创建TableImpl POJO名称连接器和joda.time.DateTime个变量

jsonschema2pojo使用变量java.time.Instant创建POJO名称JsonConnector

如何将jooq SELECT RESULT FETCH转换为jsonschema2pojo create obj

List <JsonConnector> list = ctx.select(
    CONNECTOR.INT1,
    CONNECTOR.STRING1,
    CONNECTOR.STRING2,
    CONNECTOR.STRING3,
    CONNECTOR.STRING4,
    CONNECTOR.JODA_TIME_DATETIME))
    .from(CONNECTOR)
    .fetchInto(JsonConnector.class);

jooq fetchInto jsonschema2pojo一切简单类型转换都可以,但POJO类型org.joda.time.DateTime到类型java.time.Instant

这将引发异常 org.jooq.exception.MappingException: An error ocurred when mapping record to class JsonConnector

我怎样才能像这样编写函数 TableField<ConnectorRecord, Instant> convertDateTimeToInstant(TableField<ConnectorRecord, DateTime> datatimeField)个 或者一些好的方法

谢谢

推荐答案

Register a global ConverterProvider

对于这里的特定用例,您可以实现能够在这两种数据类型之间进行转换的ConverterProvider.ConverterProvider是一个SPI,它允许覆盖两个数据类型(如DateTimeInstant)之间的双向默认数据类型转换.

大致如下:

class MyConverterProvider implements ConverterProvider {
    final ConverterProvider delegate = new DefaultConverterProvider();
    
    @Override
    public <T, U> Converter<T, U> provide(Class<T> tType, Class<U> uType) {
        if (tType == DateTime.class && uType == Instant.class) {
            return Converter.ofNullable(tType, uType,
                t -> (U) dateTimeToInstant((DateTime) t),
                u -> (T) instantToDateTime((Instant) u)
            );
        }
        
        // Delegate all other type pairs to jOOQ's default
        else
            return delegate.provide(tType, uType);
    }
}

然后将其设置为本地或全球Configuration:

configuration.set(new MyConverterProvider());

使用本地点对点转换器

您始终可以将本地ad-hoc converter附加到字段,从而有效地链接转换器

List <JsonConnector> list = ctx.select(
    CONNECTOR.INT1,
    CONNECTOR.STRING1,
    CONNECTOR.STRING2,
    CONNECTOR.STRING3,
    CONNECTOR.STRING4,
    CONNECTOR.JODA_TIME_DATETIME.convertFrom(d -> dateTimeToInstant(d)))
    .from(CONNECTOR)
    .fetchInto(JsonConnector.class);

Java相关问答推荐

泽西岛:退回到不注射的客户"

@ EnableRouting注释在Kotlin项目中不工作

我想了解Java中的模块化.编译我的应用程序时,我有一个ResolutionException

Java List with all combinations of 8 booleans

工件部署期间出错[Tomcat 8.5.45]

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

在springboot 3中,当我调用api endpoint时,会出现404

多重延迟签名

在向WebSphere中的文档添加元素时iText挂起

使用正则表达式从字符串中提取多个值

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

深度优先搜索实现:算法只向右搜索

AWS Java SDK v2.x中没有setObjectAcl方法

使用for循环时出现堆栈溢出错误,但如果使用if块执行相同的操作,则不会产生错误

如何调整JButton的大小以适应图标?

无法使用Open WebStart Java 8运行jnlp

JavaFX中ListView中的问题

如何使用命令行为Java应用程序生成烟雾测试用例

在不带instanceof或switch的java中记录模式