From 8a50a162ddde8648f2f9e6de39e34da3a90ef753 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 8 May 2025 16:53:31 +0800 Subject: [PATCH] feat(serialization): add toObjectNode extension function for String - Add toObjectNode extension function to String class for easier conversion to ObjectNode - Update usage in tests and R2dbcEventStore to use the new function - Remove redundant type casting when converting JSON string to ObjectNode Signed-off-by: Ahoo Wang --- .../main/kotlin/me/ahoo/wow/serialization/JsonSerializer.kt | 5 +++++ .../kotlin/me/ahoo/wow/serialization/JsonSerializerTest.kt | 2 +- .../me/ahoo/wow/serialization/event/StateJsonRecordTest.kt | 5 ++--- .../src/main/kotlin/me/ahoo/wow/r2dbc/R2dbcEventStore.kt | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/wow-core/src/main/kotlin/me/ahoo/wow/serialization/JsonSerializer.kt b/wow-core/src/main/kotlin/me/ahoo/wow/serialization/JsonSerializer.kt index f2227882e24..5a52454b331 100644 --- a/wow-core/src/main/kotlin/me/ahoo/wow/serialization/JsonSerializer.kt +++ b/wow-core/src/main/kotlin/me/ahoo/wow/serialization/JsonSerializer.kt @@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.JavaType import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.module.kotlin.registerKotlinModule object JsonSerializer : ObjectMapper() { @@ -47,6 +48,10 @@ fun String.toJsonNode(): T { return JsonSerializer.readTree(this) as T } +fun String.toObjectNode(): ObjectNode { + return toJsonNode() +} + fun String.toObject(objectType: JavaType): T { return JsonSerializer.readValue(this, objectType) } diff --git a/wow-core/src/test/kotlin/me/ahoo/wow/serialization/JsonSerializerTest.kt b/wow-core/src/test/kotlin/me/ahoo/wow/serialization/JsonSerializerTest.kt index e8234412036..863bd90faf5 100644 --- a/wow-core/src/test/kotlin/me/ahoo/wow/serialization/JsonSerializerTest.kt +++ b/wow-core/src/test/kotlin/me/ahoo/wow/serialization/JsonSerializerTest.kt @@ -106,7 +106,7 @@ internal class JsonSerializerTest { ) val mockEventJson = mockEvent.toJsonString() val mutableDomainEventRecord = - mockEventJson.toJsonNode().toDomainEventRecord().toMutableDomainEventRecord() + mockEventJson.toObjectNode().toDomainEventRecord().toMutableDomainEventRecord() mutableDomainEventRecord.bodyType = "NotFoundClass" val failedDomainEvent = mutableDomainEventRecord.actual.toJsonString().toObject>() assertThat(failedDomainEvent, instanceOf(JsonDomainEvent::class.java)) diff --git a/wow-core/src/test/kotlin/me/ahoo/wow/serialization/event/StateJsonRecordTest.kt b/wow-core/src/test/kotlin/me/ahoo/wow/serialization/event/StateJsonRecordTest.kt index 706b49fdac9..288fa8f7e2a 100644 --- a/wow-core/src/test/kotlin/me/ahoo/wow/serialization/event/StateJsonRecordTest.kt +++ b/wow-core/src/test/kotlin/me/ahoo/wow/serialization/event/StateJsonRecordTest.kt @@ -13,11 +13,10 @@ package me.ahoo.wow.serialization.event -import com.fasterxml.jackson.databind.node.ObjectNode import me.ahoo.wow.api.Identifier import me.ahoo.wow.id.generateGlobalId -import me.ahoo.wow.serialization.toJsonNode import me.ahoo.wow.serialization.toJsonString +import me.ahoo.wow.serialization.toObjectNode import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test @@ -25,7 +24,7 @@ class StateJsonRecordTest { @Test fun toState() { val state = MockState() - val stateNode = state.toJsonString().toJsonNode() + val stateNode = state.toJsonString().toObjectNode() val stateJsonRecord = StateJsonRecord(stateNode) assertThat(stateJsonRecord.state()).isEqualTo(state) assertThat(stateJsonRecord.actual).isEqualTo(stateNode) diff --git a/wow-r2dbc/src/main/kotlin/me/ahoo/wow/r2dbc/R2dbcEventStore.kt b/wow-r2dbc/src/main/kotlin/me/ahoo/wow/r2dbc/R2dbcEventStore.kt index 3a13fa7e3cb..e8e902751d1 100644 --- a/wow-r2dbc/src/main/kotlin/me/ahoo/wow/r2dbc/R2dbcEventStore.kt +++ b/wow-r2dbc/src/main/kotlin/me/ahoo/wow/r2dbc/R2dbcEventStore.kt @@ -27,6 +27,7 @@ import me.ahoo.wow.serialization.event.FlatEventStreamRecord import me.ahoo.wow.serialization.event.toEventStreamRecord import me.ahoo.wow.serialization.toJsonNode import me.ahoo.wow.serialization.toJsonString +import me.ahoo.wow.serialization.toObjectNode import reactor.core.publisher.Flux import reactor.core.publisher.Mono @@ -110,7 +111,7 @@ class R2dbcEventStore( id = id, rawAggregateId = aggregateId, ownerId = ownerId, - header = header.toJsonNode() as ObjectNode, + header = header.toObjectNode(), body = body.toJsonNode(), commandId = commandId, requestId = requestId,