From 38a50d1775221c64d0d6ce0d1644f3fb200ee484 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 15 Aug 2022 13:14:28 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-16 --- .../request/cud/MoneyMarketCreateAction.java | 4 ++++ .../securitites/MoneyMarketCreateRequest.java | 6 +++-- .../json/deserialize/InstantDeserializer.java | 23 +++++++++++++++++++ .../json/serialize/InstantSerializer.java | 21 +++++++++++++++++ .../spcex/platform/utils/time/TimeUtil.java | 22 ++++++++++++++++++ 5 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/deserialize/InstantDeserializer.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/serialize/InstantSerializer.java create mode 100644 platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/time/TimeUtil.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/MoneyMarketCreateAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/MoneyMarketCreateAction.java index b3e07af27..e47a409ae 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/MoneyMarketCreateAction.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/MoneyMarketCreateAction.java @@ -2,16 +2,20 @@ package ru.spcex.clearing.backendapi.controller.request.cud; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import ru.spcex.clearing.backendapi.domain.actions.IAction; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketCreateRequest; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer; import java.time.Instant; public class MoneyMarketCreateAction implements IAction { @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Europe/Moscow") + @JsonDeserialize(using = InstantDeserializer.class) @JsonProperty public Instant startDate; @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Europe/Moscow") + @JsonDeserialize(using = InstantDeserializer.class) @JsonProperty public Instant endDate; @JsonProperty diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/MoneyMarketCreateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/MoneyMarketCreateRequest.java index 9512972b0..6013392ff 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/MoneyMarketCreateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/MoneyMarketCreateRequest.java @@ -1,15 +1,17 @@ package ru.spcex.clearing.platform.messaging.domain.cud.securitites; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer; import java.time.Instant; public class MoneyMarketCreateRequest { - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Europe/Moscow") @JsonProperty + @JsonSerialize(using = InstantSerializer.class) public Instant startDate; @JsonProperty + @JsonSerialize(using = InstantSerializer.class) public Instant endDate; @JsonProperty public Double nominalValue; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/deserialize/InstantDeserializer.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/deserialize/InstantDeserializer.java new file mode 100644 index 000000000..534bea859 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/deserialize/InstantDeserializer.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.platform.messaging.domain.json.deserialize; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import ru.spcex.platform.utils.time.TimeUtil; + +import java.io.IOException; +import java.time.Instant; +import java.time.format.DateTimeFormatter; + +public class InstantDeserializer extends JsonDeserializer { + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + @Override + public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String date = p.getText(); + if (date == null || date.trim().length() == 0) { + return null; + } + return TimeUtil.parseInstantDt(date, formatter); + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/serialize/InstantSerializer.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/serialize/InstantSerializer.java new file mode 100644 index 000000000..b1e2c5d24 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/json/serialize/InstantSerializer.java @@ -0,0 +1,21 @@ +package ru.spcex.clearing.platform.messaging.domain.json.serialize; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import ru.spcex.platform.utils.time.TimeUtil; + +import java.io.IOException; +import java.time.Instant; +import java.time.format.DateTimeFormatter; + +public class InstantSerializer extends JsonSerializer { + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + + @Override + public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value == null) return; + gen.writeString(TimeUtil.formatInstant(value, formatter)); + } +} diff --git a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/time/TimeUtil.java b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/time/TimeUtil.java new file mode 100644 index 000000000..94a33704c --- /dev/null +++ b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/time/TimeUtil.java @@ -0,0 +1,22 @@ +package ru.spcex.platform.utils.time; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; + +public class TimeUtil { + public static ZoneId zone = ZoneId.systemDefault(); + + /** + * метод чтобы парсить в инстант даты типа yyyy-MM-dd, dd.MM.yyyy и т.д. + */ + public static Instant parseInstantDt(String date, DateTimeFormatter formatter) { + return LocalDate.parse(date, formatter).atStartOfDay(zone).toInstant(); + } + + public static String formatInstant(Instant date, DateTimeFormatter formatter) { + if (date == null) return null; + return formatter.format(date.atZone(zone)); + } +}