From e05aff87d184ee17ca9933334c9d76ef3cf6d651 Mon Sep 17 00:00:00 2001 From: Iulian Masar Date: Tue, 11 Feb 2025 09:26:46 +0200 Subject: [PATCH 1/2] added CardInfoType serializer/deserializer --- src/main/java/com/mangopay/MangoPayApi.java | 8 +++++ .../CardInfoTypeDeserializer.java | 20 ++++++++++++ .../serializer/CardInfoTypeSerializer.java | 19 +++++++++++ .../java/com/mangopay/entities/GsonTest.java | 32 +++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java create mode 100644 src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java create mode 100644 src/test/java/com/mangopay/entities/GsonTest.java diff --git a/src/main/java/com/mangopay/MangoPayApi.java b/src/main/java/com/mangopay/MangoPayApi.java index 6c8f081f..b7d603c2 100644 --- a/src/main/java/com/mangopay/MangoPayApi.java +++ b/src/main/java/com/mangopay/MangoPayApi.java @@ -6,6 +6,9 @@ import com.mangopay.core.APIs.implementation.*; import com.mangopay.core.AuthorizationTokenManager; import com.mangopay.core.Configuration; +import com.mangopay.core.deserializer.CardInfoTypeDeserializer; +import com.mangopay.core.enumerations.CardInfoType; +import com.mangopay.core.serializer.CardInfoTypeSerializer; import com.mangopay.entities.RateLimit; import java.util.List; @@ -55,6 +58,11 @@ public MangoPayApi() { setVirtualAccountApi(new VirtualAccountApiImpl(this)); setConversionsApi(new ConversionsApiImpl(this, gsonBuilder)); setIdentityVerificationApi(new IdentityVerificationApiImpl(this)); + + // register custom serializers/deserializers for objects that are used in multiple APIs + gsonBuilder.registerTypeAdapter(CardInfoType.class, new CardInfoTypeSerializer()); + gsonBuilder.registerTypeAdapter(CardInfoType.class, new CardInfoTypeDeserializer()); + setGson(gsonBuilder.create()); } diff --git a/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java b/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java new file mode 100644 index 00000000..786198ce --- /dev/null +++ b/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java @@ -0,0 +1,20 @@ +package com.mangopay.core.deserializer; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.mangopay.core.enumerations.CardInfoType; + +import java.lang.reflect.Type; + +public class CardInfoTypeDeserializer implements JsonDeserializer { + @Override + public CardInfoType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + String value = json.getAsString(); + if ("CHARGE CARD".equals(value)) { + return CardInfoType.CHARGE_CARD; + } + return CardInfoType.valueOf(value); + } +} diff --git a/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java b/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java new file mode 100644 index 00000000..45cac635 --- /dev/null +++ b/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java @@ -0,0 +1,19 @@ +package com.mangopay.core.serializer; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.mangopay.core.enumerations.CardInfoType; + +import java.lang.reflect.Type; + +public class CardInfoTypeSerializer implements JsonSerializer { + @Override + public JsonElement serialize(CardInfoType src, Type typeOfSrc, JsonSerializationContext context) { + if (src == CardInfoType.CHARGE_CARD) { + return new JsonPrimitive("CHARGE CARD"); + } + return new JsonPrimitive(src.name()); + } +} diff --git a/src/test/java/com/mangopay/entities/GsonTest.java b/src/test/java/com/mangopay/entities/GsonTest.java new file mode 100644 index 00000000..93fa33bf --- /dev/null +++ b/src/test/java/com/mangopay/entities/GsonTest.java @@ -0,0 +1,32 @@ +package com.mangopay.entities; + +import com.mangopay.core.BaseTest; +import com.mangopay.core.enumerations.CardInfoType; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class GsonTest extends BaseTest { + @Test + public void testSerializeCardInfoType() { + CardInfoType type = CardInfoType.CHARGE_CARD; + String json = getApi().getGson().toJson(type); + assertEquals("\"CHARGE CARD\"", json); + + type = null; + json = getApi().getGson().toJson(type); + assertEquals("null", json); + } + + @Test + public void testDeserializeCardInfoType() { + String jsonInput = "\"CHARGE CARD\""; + CardInfoType deserialized = getApi().getGson().fromJson(jsonInput, CardInfoType.class); + assertEquals(CardInfoType.CHARGE_CARD, deserialized); + + jsonInput = "null"; + deserialized = getApi().getGson().fromJson(jsonInput, CardInfoType.class); + assertNull(deserialized); + } +} From 5a61e9d6d07bd6580a579a3694381b01e204fdc1 Mon Sep 17 00:00:00 2001 From: Iulian Masar Date: Tue, 11 Feb 2025 09:38:00 +0200 Subject: [PATCH 2/2] added null checks --- .../core/deserializer/CardInfoTypeDeserializer.java | 3 +++ .../mangopay/core/serializer/CardInfoTypeSerializer.java | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java b/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java index 786198ce..1dd04aaa 100644 --- a/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java +++ b/src/main/java/com/mangopay/core/deserializer/CardInfoTypeDeserializer.java @@ -12,6 +12,9 @@ public class CardInfoTypeDeserializer implements JsonDeserializer @Override public CardInfoType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { String value = json.getAsString(); + if ("null".equals(value)) { + return null; + } if ("CHARGE CARD".equals(value)) { return CardInfoType.CHARGE_CARD; } diff --git a/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java b/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java index 45cac635..dc407bdf 100644 --- a/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java +++ b/src/main/java/com/mangopay/core/serializer/CardInfoTypeSerializer.java @@ -1,9 +1,6 @@ package com.mangopay.core.serializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; +import com.google.gson.*; import com.mangopay.core.enumerations.CardInfoType; import java.lang.reflect.Type; @@ -11,6 +8,9 @@ public class CardInfoTypeSerializer implements JsonSerializer { @Override public JsonElement serialize(CardInfoType src, Type typeOfSrc, JsonSerializationContext context) { + if (src == null) { + return JsonNull.INSTANCE; + } if (src == CardInfoType.CHARGE_CARD) { return new JsonPrimitive("CHARGE CARD"); }