Skip to content
Advertisement

Is it possible to map jooq Record from string

I have a case where I need to map jooq Record from json to class instance. We have used our own mapper for this in the past, but underlying table had only basic types so it was working fine. Now we have a need to map Postgres interval type to jooq YearToSecond and it is not working anymore.

I was wondering if there is a way to create these via jooq api or at least somehow get to the underlying mapper that jooq uses (I assume jooq has some kind of a mapper underneath).

Example: {"my_text":"This is text","my_interval_type":"05:00:00"} to deserialize to MyRecord class which will have String myText and YearToSecond myIntervalType fields

Advertisement

Answer

The basic way to map JSON strings to jOOQ Result values is by using DSLContext.fetchFromJSON(String).

Unfortunately, as of jOOQ 3.16, you cannot yet provide data type information to this mechanism, so everything will be a String, there’s no implied YearToSecond support. There’s a pending feature request https://github.com/jOOQ/jOOQ/issues/12012, which should ship soon as it is indeed very useful.

That feature request is merely a matter of opening up jOOQ’s internals, which you already correctly assumed, existed. The relevant class in jOOQ 3.16 is org.jooq.impl.JSONReader, which could do the trick for you as a workaround, if you’re willing to access jOOQ’s internals via reflection?

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement