From 42b7bca653dc798e3e2a97c3cd8d02fcd1237c55 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 16 May 2024 12:12:16 +0300 Subject: [PATCH] =?UTF-8?q?platform-messaging=20=D0=9F=D1=80=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20Json=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20NULL=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=BF=D0=B0=D0=B4=D1=83=D1=82=20?= =?UTF-8?q?=D0=B2=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform-parent/platform-messaging/pom.xml | 7 ++ .../serialization/JsonSerializer.java | 2 + .../serialization/JsonDeserializerTest.java | 54 +++++++++ .../serialization/JsonSerializerTest.java | 103 ++++++++++++++++++ 4 files changed, 166 insertions(+) create mode 100644 platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonDeserializerTest.java create mode 100644 platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializerTest.java diff --git a/platform-parent/platform-messaging/pom.xml b/platform-parent/platform-messaging/pom.xml index 557e1a9ad..3e1d4a363 100644 --- a/platform-parent/platform-messaging/pom.xml +++ b/platform-parent/platform-messaging/pom.xml @@ -57,5 +57,12 @@ org.springframework.kafka spring-kafka + + + + org.junit.jupiter + junit-jupiter + test + \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializer.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializer.java index e819ab119..66b99c4f6 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializer.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializer.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.platform.messaging.serialization; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.kafka.common.header.Headers; import org.apache.kafka.common.header.internals.RecordHeader; @@ -14,6 +15,7 @@ public class JsonSerializer implements Serializer { public JsonSerializer() { this.json = new ObjectMapper(); + json.setSerializationInclusion(JsonInclude.Include.NON_NULL); // this.typeMapper = new DefaultJackson2JavaTypeMapper(); } diff --git a/platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonDeserializerTest.java b/platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonDeserializerTest.java new file mode 100644 index 000000000..873f1078d --- /dev/null +++ b/platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonDeserializerTest.java @@ -0,0 +1,54 @@ +package ru.spcex.clearing.platform.messaging.serialization; + +import org.apache.kafka.common.header.Headers; +import org.apache.kafka.common.header.internals.RecordHeaders; +import org.junit.jupiter.api.Test; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; + +import java.io.UnsupportedEncodingException; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @see JsonSerializerTest + */ +class JsonDeserializerTest { + + @Test + void testDeserialize() throws UnsupportedEncodingException { + Headers headers; + byte[] jsonB; + { + JsonSerializer serializer = new JsonSerializer(); + + JsonSerializerTest.TestObj data = new JsonSerializerTest.TestObj(); + data.setCompanyId(123L); + data.setSection("Section \\<>?'\" 2 Секция два."); + + BaseRequest req = new BaseRequest<>(); + req.setId(12L); + req.setActionType(ActionType.NEW); + req.setUserId(1020L); + req.setRequestPayload(data); + headers = new RecordHeaders(); + jsonB = serializer.serialize("topic-1", headers, req); + String json = new String(jsonB, "utf-8"); + assertEquals("{\"id\":12,\"actionType\":\"NEW\",\"requestPayload\":{\"companyId\":123,\"section\":\"Section \\\\<>?'\\\" 2 Секция два.\"},\"userId\":1020}", + json); + } + { + JsonDeserializer deserializer = new JsonDeserializer(); + + Object o = deserializer.deserialize("topic-1", headers, jsonB); + BaseRequest req = (BaseRequest) o; + assertEquals(ActionType.NEW, req.getActionType()); + assertEquals(12L, req.getId()); + assertEquals("Section \\<>?'\" 2 Секция два.", req.getRequestPayload().getSection()); + assertEquals(123L, req.getRequestPayload().getCompanyId()); + assertNull(req.getRequestPayload().getTaskName()); + assertNull(req.getRequestPayload().getUserId()); + assertEquals(0, req.getUnknownProperties().size()); + } + } +} \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializerTest.java b/platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializerTest.java new file mode 100644 index 000000000..8355ddbf3 --- /dev/null +++ b/platform-parent/platform-messaging/src/test/java/ru/spcex/clearing/platform/messaging/serialization/JsonSerializerTest.java @@ -0,0 +1,103 @@ +package ru.spcex.clearing.platform.messaging.serialization; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.kafka.common.header.Headers; +import org.apache.kafka.common.header.internals.RecordHeaders; +import org.junit.jupiter.api.Test; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; + +import java.io.UnsupportedEncodingException; + +import static org.junit.jupiter.api.Assertions.*; + +class JsonSerializerTest { + + @Test + void serialize() throws UnsupportedEncodingException { + JsonSerializer serializer = new JsonSerializer(); + + TestObj data = new TestObj(); + data.setCompanyId(123L); + data.setSection("Section \\<>?'\" 2 Секция два."); + + byte[] jsonB = serializer.serialize("topic-1", data); + String json = new String(jsonB, "utf-8"); + assertEquals("{\"companyId\":123,\"section\":\"Section \\\\<>?'\\\" 2 Секция два.\"}", + json); + } + + @Test + void serialize2() throws UnsupportedEncodingException { + JsonSerializer serializer = new JsonSerializer(); + + TestObj data = new TestObj(); + data.setCompanyId(123L); + data.setSection("Section \\<>?'\" 2 Секция два."); + + BaseRequest req = new BaseRequest<>(); + req.setId(12L); + req.setActionType(ActionType.NEW); + req.setUserId(1020L); + req.setRequestPayload(data); + Headers headers = new RecordHeaders(); + byte[] jsonB = serializer.serialize("topic-1", headers, req); + String json = new String(jsonB, "utf-8"); + assertEquals("{\"id\":12,\"actionType\":\"NEW\",\"requestPayload\":{\"companyId\":123,\"section\":\"Section \\\\<>?'\\\" 2 Секция два.\"},\"userId\":1020}", + json); + + } + + public static class TestObj { + @JsonProperty + private Long userId; + @JsonProperty + private String taskName; + @JsonProperty + private Long companyId; + @JsonProperty + private Long securityId; + @JsonProperty + private String section; + + public void setUserId(Long userId) { + this.userId = userId; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public void setSecurityId(Long securityId) { + this.securityId = securityId; + } + + public void setSection(String section) { + this.section = section; + } + + public Long getUserId() { + return userId; + } + + public String getTaskName() { + return taskName; + } + + public Long getCompanyId() { + return companyId; + } + + public Long getSecurityId() { + return securityId; + } + + public String getSection() { + return section; + } + } +} \ No newline at end of file