Is possible to remove annotation like:
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
protected LocalDateTime createTime;
from code, and create some one place configuration in springboot?
Problem occure, when i try to get data from database this way:
public SomeDataMasterDto findById(Integer id) {
SomeDataMasterDto someDataMasterDto = dslContext
.select(jsonObject(
key("id").value(SOME_DATA_MASTER.ID),
key("createTime").value(SOME_DATA_MASTER.CREATE_TIME),
key("orderTime").value(SOME_DATA_MASTER.ORDER_TIME),
key("someDataOtherDtos").value(jsonArrayAgg(jsonObject(
key("id").value(SOME_DATA_OTHER.ID),
key("createTime").value(SOME_DATA_OTHER.CREATE_TIME),
key("offerType").value(SOME_DATA_OTHER.OFFER_TYPE),
)).absentOnNull())
))
.from(SOME_DATA_MASTER)
.leftJoin(SOME_DATA_OTHER).on(SOME_DATA_OTHER.SOME_DATA_MASTER_ID.eq(SOME_DATA_MASTER.ID))
.where(SOME_DATA_MASTER.ID.eq(id))
.groupBy(SOME_DATA_MASTER.ID)
.fetchOneInto(SomeDataMasterDto.class);
return someDataMasterDto;
}
I try override ObjectMapper in springboot like:
@Configuration
public class JacksonObjectMapper {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
return mapper;
}
}
but i think, that jooq use own created objectMapper. I tried also other examples from stackoverflow (with Jackson2ObjectMapperBuilder
, DateFormatter
...) but without success.
Environment:
I'm assuming you're using this approach as it was recommended in jOOQ 3.14 to use SQL/JSON to nest collections with jOOQ ? If you're ready to upgrade to jOOQ 3.15, the SQL/JSON serialisation bits can be abstracted using the new standard SQL MULTISET
support , in case of which you can write:
SomeDataMasterDto result =
ctx.select(
SOME_DATA_MASTER.ID,
SOME_DATA_MASTER.CREATE_TIME,
SOME_DATA_MASTER.ORDER_TIME,
multisetAgg(
SOME_DATA_OTHER.ID,
SOME_DATA_OTHER.CREATE_TIME,
SOME_DATA_OTHER.OFFER_TYPE,
).as("someDataOtherDtos")
.convertFrom(r -> r.map(Records.mapping(SomeDataOtherDto::new)))
)
.from(SOME_DATA_MASTER)
.leftJoin(SOME_DATA_OTHER)
.on(SOME_DATA_OTHER.SOME_DATA_MASTER_ID.eq(SOME_DATA_MASTER.ID))
.where(SOME_DATA_MASTER.ID.eq(id))
.groupBy(SOME_DATA_MASTER.ID)
.fetchOne(Records.mapping(SomeDataMasterDto::new));
The above mapping approach is using the new ad-hoc conversion features and is assuming your DTOs are immutable objects (eg Java 16 records). You can still use the reflection methods, if you prefer that, using into(Class<?>)
See also:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.