diff --git a/src/main/java/com/stripe/model/StringInt64TypeAdapter.java b/src/main/java/com/stripe/model/StringInt64TypeAdapter.java new file mode 100644 index 00000000000..a742d945a68 --- /dev/null +++ b/src/main/java/com/stripe/model/StringInt64TypeAdapter.java @@ -0,0 +1,31 @@ +package com.stripe.model; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +public class StringInt64TypeAdapter extends TypeAdapter { + /** Serializes Long values as JSON strings and deserializes string-encoded integers. */ + @Override + public void write(JsonWriter out, Long value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } + + out.value(value.toString()); + } + + @Override + public Long read(JsonReader in) throws IOException { + JsonToken token = in.peek(); + if (token == JsonToken.NULL) { + in.nextNull(); + return null; + } + + return Long.valueOf(in.nextString()); + } +} diff --git a/src/main/java/com/stripe/model/v2/billing/Cadence.java b/src/main/java/com/stripe/model/v2/billing/Cadence.java index e8f03b548c4..e9b00816a75 100644 --- a/src/main/java/com/stripe/model/v2/billing/Cadence.java +++ b/src/main/java/com/stripe/model/v2/billing/Cadence.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.List; @@ -722,6 +724,7 @@ public static class Card extends StripeObject { public static class MandateOptions extends StripeObject { /** Amount to be charged for future payments. */ @SerializedName("amount") + @JsonAdapter(StringInt64TypeAdapter.class) Long amount; /** The AmountType for the mandate. One of {@code fixed} or {@code maximum}. */ diff --git a/src/main/java/com/stripe/model/v2/billing/CollectionSetting.java b/src/main/java/com/stripe/model/v2/billing/CollectionSetting.java index 4a9be6c5836..146ebdd6e6c 100644 --- a/src/main/java/com/stripe/model/v2/billing/CollectionSetting.java +++ b/src/main/java/com/stripe/model/v2/billing/CollectionSetting.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.List; @@ -247,6 +249,7 @@ public static class Card extends StripeObject { public static class MandateOptions extends StripeObject { /** Amount to be charged for future payments. */ @SerializedName("amount") + @JsonAdapter(StringInt64TypeAdapter.class) Long amount; /** The AmountType for the mandate. One of {@code fixed} or {@code maximum}. */ diff --git a/src/main/java/com/stripe/model/v2/billing/CollectionSettingVersion.java b/src/main/java/com/stripe/model/v2/billing/CollectionSettingVersion.java index fb3cbd49a15..2035073002d 100644 --- a/src/main/java/com/stripe/model/v2/billing/CollectionSettingVersion.java +++ b/src/main/java/com/stripe/model/v2/billing/CollectionSettingVersion.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.List; @@ -226,6 +228,7 @@ public static class Card extends StripeObject { public static class MandateOptions extends StripeObject { /** Amount to be charged for future payments. */ @SerializedName("amount") + @JsonAdapter(StringInt64TypeAdapter.class) Long amount; /** The AmountType for the mandate. One of {@code fixed} or {@code maximum}. */ diff --git a/src/main/java/com/stripe/model/v2/billing/LicenseFee.java b/src/main/java/com/stripe/model/v2/billing/LicenseFee.java index 41c8f5f1616..996f9416822 100644 --- a/src/main/java/com/stripe/model/v2/billing/LicenseFee.java +++ b/src/main/java/com/stripe/model/v2/billing/LicenseFee.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.List; @@ -196,6 +198,7 @@ public static class Tier extends StripeObject { public static class TransformQuantity extends StripeObject { /** Divide usage by this number. */ @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) Long divideBy; /** diff --git a/src/main/java/com/stripe/model/v2/billing/LicenseFeeVersion.java b/src/main/java/com/stripe/model/v2/billing/LicenseFeeVersion.java index 57c5b10de47..f9dab7edca7 100644 --- a/src/main/java/com/stripe/model/v2/billing/LicenseFeeVersion.java +++ b/src/main/java/com/stripe/model/v2/billing/LicenseFeeVersion.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.List; @@ -124,6 +126,7 @@ public static class Tier extends StripeObject { public static class TransformQuantity extends StripeObject { /** Divide usage by this number. */ @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) Long divideBy; /** diff --git a/src/main/java/com/stripe/model/v2/billing/RateCardRate.java b/src/main/java/com/stripe/model/v2/billing/RateCardRate.java index baa5841cdaa..85fa09c954e 100644 --- a/src/main/java/com/stripe/model/v2/billing/RateCardRate.java +++ b/src/main/java/com/stripe/model/v2/billing/RateCardRate.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.List; @@ -167,6 +169,7 @@ public static class Tier extends StripeObject { public static class TransformQuantity extends StripeObject { /** Divide usage by this number. */ @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) Long divideBy; /** diff --git a/src/main/java/com/stripe/model/v2/reporting/ReportRun.java b/src/main/java/com/stripe/model/v2/reporting/ReportRun.java index cd086c1cce2..659323dcc14 100644 --- a/src/main/java/com/stripe/model/v2/reporting/ReportRun.java +++ b/src/main/java/com/stripe/model/v2/reporting/ReportRun.java @@ -1,8 +1,10 @@ // File generated from our OpenAPI spec package com.stripe.model.v2.reporting; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; import com.stripe.model.HasId; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.model.StripeObject; import java.time.Instant; import java.util.Map; @@ -122,6 +124,7 @@ public static class File extends StripeObject { /** The total size of the file in bytes. */ @SerializedName("size") + @JsonAdapter(StringInt64TypeAdapter.class) Long size; /** A pre-signed URL that allows secure, time-limited access to download the file. */ diff --git a/src/main/java/com/stripe/param/v2/billing/CollectionSettingCreateParams.java b/src/main/java/com/stripe/param/v2/billing/CollectionSettingCreateParams.java index a4ae606600f..6eab345b23f 100644 --- a/src/main/java/com/stripe/param/v2/billing/CollectionSettingCreateParams.java +++ b/src/main/java/com/stripe/param/v2/billing/CollectionSettingCreateParams.java @@ -1,7 +1,9 @@ // File generated from our OpenAPI spec package com.stripe.param.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.net.ApiRequestParams; import java.util.ArrayList; import java.util.HashMap; @@ -1016,6 +1018,7 @@ public Builder setRequestThreeDSecure( public static class MandateOptions { /** Amount to be charged for future payments. */ @SerializedName("amount") + @JsonAdapter(StringInt64TypeAdapter.class) Long amount; /** The AmountType for the mandate. One of {@code fixed} or {@code maximum}. */ diff --git a/src/main/java/com/stripe/param/v2/billing/CollectionSettingUpdateParams.java b/src/main/java/com/stripe/param/v2/billing/CollectionSettingUpdateParams.java index b4eb433b47e..95fb6832134 100644 --- a/src/main/java/com/stripe/param/v2/billing/CollectionSettingUpdateParams.java +++ b/src/main/java/com/stripe/param/v2/billing/CollectionSettingUpdateParams.java @@ -1,7 +1,9 @@ // File generated from our OpenAPI spec package com.stripe.param.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.net.ApiRequestParams; import com.stripe.param.common.EmptyParam; import java.util.ArrayList; @@ -1088,6 +1090,7 @@ public Builder setRequestThreeDSecure( public static class MandateOptions { /** Amount to be charged for future payments. */ @SerializedName("amount") + @JsonAdapter(StringInt64TypeAdapter.class) Long amount; /** The AmountType for the mandate. One of {@code fixed} or {@code maximum}. */ diff --git a/src/main/java/com/stripe/param/v2/billing/LicenseFeeCreateParams.java b/src/main/java/com/stripe/param/v2/billing/LicenseFeeCreateParams.java index beb736e8731..7fe576103b0 100644 --- a/src/main/java/com/stripe/param/v2/billing/LicenseFeeCreateParams.java +++ b/src/main/java/com/stripe/param/v2/billing/LicenseFeeCreateParams.java @@ -1,7 +1,9 @@ // File generated from our OpenAPI spec package com.stripe.param.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.net.ApiRequestParams; import java.util.ArrayList; import java.util.HashMap; @@ -516,6 +518,7 @@ public enum UpToInf implements ApiRequestParams.EnumParam { public static class TransformQuantity { /** Required. Divide usage by this number. */ @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) Long divideBy; /** diff --git a/src/main/java/com/stripe/param/v2/billing/LicenseFeeUpdateParams.java b/src/main/java/com/stripe/param/v2/billing/LicenseFeeUpdateParams.java index 83a356b9d73..380972b5835 100644 --- a/src/main/java/com/stripe/param/v2/billing/LicenseFeeUpdateParams.java +++ b/src/main/java/com/stripe/param/v2/billing/LicenseFeeUpdateParams.java @@ -1,7 +1,9 @@ // File generated from our OpenAPI spec package com.stripe.param.v2.billing; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.net.ApiRequestParams; import com.stripe.param.common.EmptyParam; import java.util.ArrayList; @@ -511,6 +513,7 @@ public enum UpToInf implements ApiRequestParams.EnumParam { public static class TransformQuantity { /** Required. Divide usage by this number. */ @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) Long divideBy; /** diff --git a/src/main/java/com/stripe/param/v2/billing/ratecards/RateCreateParams.java b/src/main/java/com/stripe/param/v2/billing/ratecards/RateCreateParams.java index df85b03f099..f25fee22d3b 100644 --- a/src/main/java/com/stripe/param/v2/billing/ratecards/RateCreateParams.java +++ b/src/main/java/com/stripe/param/v2/billing/ratecards/RateCreateParams.java @@ -1,7 +1,9 @@ // File generated from our OpenAPI spec package com.stripe.param.v2.billing.ratecards; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.net.ApiRequestParams; import java.util.ArrayList; import java.util.HashMap; @@ -488,6 +490,7 @@ public enum UpToInf implements ApiRequestParams.EnumParam { public static class TransformQuantity { /** Required. Divide usage by this number. */ @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) Long divideBy; /** diff --git a/src/test/java/com/stripe/net/ApiRequestParamsConverterTest.java b/src/test/java/com/stripe/net/ApiRequestParamsConverterTest.java index 88a9f532212..13686d759b8 100644 --- a/src/test/java/com/stripe/net/ApiRequestParamsConverterTest.java +++ b/src/test/java/com/stripe/net/ApiRequestParamsConverterTest.java @@ -5,7 +5,11 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.stripe.model.StringInt64TypeAdapter; import com.stripe.param.common.EmptyParam; import java.time.Instant; import java.util.Arrays; @@ -122,6 +126,12 @@ private static class HasInstantParam extends ApiRequestParams { public Instant instantParam; } + private static class HasStringInt64Param extends ApiRequestParams { + @SerializedName("divide_by") + @JsonAdapter(StringInt64TypeAdapter.class) + public Long divideBy; + } + @Test public void testHasExtraParams() { ModelHasExtraParams params = new ModelHasExtraParams(ParamCode.ENUM_FOO); @@ -288,6 +298,28 @@ public void testObjectMaps() { assertEquals(objBar.get("hello"), "world"); } + @Test + public void testToMapWithStringInt64Params() { + HasStringInt64Param params = new HasStringInt64Param(); + params.divideBy = 123L; + + Map paramMap = toMap(params); + + TestCase.assertEquals(1, paramMap.size()); + TestCase.assertTrue(paramMap.containsKey("divide_by")); + TestCase.assertEquals("123", paramMap.get("divide_by")); + } + + @Test + public void testFromJsonWithStringInt64ResourceField() { + Gson gson = new GsonBuilder().create(); + + HasStringInt64Param resource = + gson.fromJson("{\"divide_by\":\"123\"}", HasStringInt64Param.class); + + TestCase.assertEquals(Long.valueOf(123L), resource.divideBy); + } + @Test public void testToMapWithInstantParams() { HasInstantParam params = new HasInstantParam();