-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathJSONFormater.java
More file actions
40 lines (34 loc) · 1.58 KB
/
JSONFormater.java
File metadata and controls
40 lines (34 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.riskified;
import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.google.gson.*;
import com.riskified.models.BankWirePaymentDetails;
import com.riskified.models.CreditCardPaymentDetails;
import com.riskified.models.IPaymentDetails;
import com.riskified.models.PaypalPaymentDetails;
import com.riskified.models.StripePaymentDetails;
public class JSONFormater {
public static String toJson(Object obj) {
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(Date.class, new DateTimeSerializer())
.registerTypeAdapterFactory(paymentDetailsSerializer())
.create();
return gson.toJson(obj);
}
public static class DateTimeSerializer implements JsonSerializer<Date> {
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
return new JsonPrimitive(df.format(src));
}
}
public static RuntimeTypeAdapterFactory paymentDetailsSerializer() {
return RuntimeTypeAdapterFactory
.of(IPaymentDetails.class, "method")
.registerSubtype(PaypalPaymentDetails.class, "paypal")
.registerSubtype(StripePaymentDetails.class, "stripe")
.registerSubtype(CreditCardPaymentDetails.class, "credit_card")
.registerSubtype(BankWirePaymentDetails.class, "bank_wire");
}
}