java - 将 Paypal Checkout 交易转换为 Java 对象?

标签 java json paypal gson

我一直在使用 Gson 开发 Paypal JSON 到 Java 对象转换器。但是,它不会生成完整的 Java 对象。似乎这种转换已经完成,但我找不到任何东西。

我的技术是获取 Paypal JSON,替换它们的非 Java 元素名称,然后将其解析为我定义的 Java 对象。

这是 Gson 的样子:

    Gson gson = new GsonBuilder().serializeNulls().create();
    JSONObjFromPaypalTrx jsonPaypalTrx = gson.fromJson(paypalTrx, JSONObjFromPaypalTrx.class);
    logger.debug("jsonPaypalTrx: " +jsonPaypalTrx);

paypalTrx为元素名替换后的Paypal JSON:

    paypalTrx: {"id":"PAYID-LXJIHMI92J52777N04488909","intent":"Sale","state":"approved","cart":"25M35194DL227451S","createTime":"2019-11-18T11:42:41Z","Payer":{"paymentMethod":"paypal","status":"VERIFIED","PayerInfo":{"email":"sb-cject591397@personal.example.com","firstName":"John","middleName":"John","lastName":"Doe","payerId":"5V25373K45VBE","countryCode":"US","ShippingAddress":{"recipientName":"John Doe","line1":"1 Main St","city":"San Jose","state":"CA","postalCode":"95131","countryCode":"US"}}},"Transactions":[{"Amount":{"total":"199.99","currency":"USD","Details":{"subtotal":"199.99","shipping":"0.00","handlingFee":"0.00","insurance":"0.00","shippingDiscount":"0.00"}},"ItemList":{},"RelatedResources":[{"Sale":{"id":"80E26736585579458","state":"completed","paymentMode":"INSTANT_TRANSFER","protectionEligibility":"ELIGIBLE","parentPayment":"PAYID-LXJIHMI92J52777N04488909","createTime":"2019-11-18T11:43:00Z","updateTime":"2019-11-18T11:43:00Z","Amount":{"total":"199.99","currency":"USD","Details":{"subtotal":"199.99","shipping":"0.00","handlingFee":"0.00","insurance":"0.00","shippingDiscount":"0.00"}}}}]}]}

这是我定义的 Java 对象:

    package com.example;

    import java.util.List;

    /**
     * This JSON Object was derived from a Paypal transaction string.
     */
    public class JSONObjFromPaypalTrx{
          private String id; 
          private String intent; 
          private String state; 
          private String cart; 
          private String createTime; 
          private Payer payer; 
          private List<Transactions> transactions; 

          public JSONObjFromPaypalTrx() {
          }

          public String getId(){
            return id; 
          }
          public void setId(String input){
             this.id = input;
          }
          public String getIntent(){
            return intent; 
          }
          public void setIntent(String input){
             this.intent = input;
          }
          public String getState(){
            return state; 
          }
          public void setState(String input){
             this.state = input;
          }
          public String getCart(){
            return cart; 
          }
          public void setCart(String input){
             this.cart = input;
          }
          public String getCreateTime(){
            return createTime; 
          }
          public void setCreateTime(String input){
             this.createTime = input;
          }
          public Payer getPayer(){
            return payer; 
          }
          public void setPayer(Payer input){
             this.payer = input;
          }
          public List<Transactions> getTransactions(){
            return transactions; 
          }
          public void setTransactions(List<Transactions> input){
             this.transactions = input;
          }

          public static class ShippingAddress{
              private String recipientName; 
              private String line1; 
              private String city; 
              private String state; 
              private String postalCode; 
              private String countryCode; 

              public ShippingAddress() {
              }

              public String getRecipientName(){
                return recipientName; 
              }
              public void setRecipientName(String input){
                 this.recipientName = input;
              }
              public String getLine1(){
                return line1; 
              }
              public void setLine1(String input){
                 this.line1 = input;
              }
              public String getCity(){
                return city; 
              }
              public void setCity(String input){
                 this.city = input;
              }
              public String getState(){
                return state; 
              }
              public void setState(String input){
                 this.state = input;
              }
              public String getPostalCode(){
                return postalCode; 
              }
              public void setPostalCode(String input){
                 this.postalCode = input;
              }
              public String getCountryCode(){
                return countryCode; 
              }
              public void setCountryCode(String input){
                 this.countryCode = input;
              }
            @Override
            public String toString() {
                return "ShippingAddress [recipientName: " + recipientName + ", line1: " + line1 + ", city: " + city
                        + ", state: " + state + ", postalCode: " + postalCode + ", countryCode: " + countryCode + "]";
            }
        }
        public static class PayerInfo{
              private String email; 
              private String firstName; 
              private String middleName; 
              private String lastName; 
              private String payerId; 
              private String countryCode; 
              private ShippingAddress shippingAddress; 

              public PayerInfo() {
              }

              public String getEmail(){
                return email; 
              }
              public void setEmail(String input){
                 this.email = input;
              }
              public String getFirstName(){
                return firstName; 
              }
              public void setFirstName(String input){
                 this.firstName = input;
              }
              public String getMiddleName(){
                return middleName; 
              }
              public void setMiddleName(String input){
                 this.middleName = input;
              }
              public String getLastName(){
                return lastName; 
              }
              public void setLastName(String input){
                 this.lastName = input;
              }
              public String getPayerId(){
                return payerId; 
              }
              public void setPayerId(String input){
                 this.payerId = input;
              }
              public String getCountryCode(){
                return countryCode; 
              }
              public void setCountryCode(String input){
                 this.countryCode = input;
              }
              public ShippingAddress getShippingAddress(){
                return shippingAddress; 
              }
              public void setShippingAddress(ShippingAddress input){
                 this.shippingAddress = input;
              }
            @Override
            public String toString() {
                return "PayerInfo [email: " + email + ", firstName: " + firstName + ", middleName: " + middleName
                        + ", lastName: " + lastName + ", payerId: " + payerId + ", countryCode: " + countryCode
                        + ", shippingAddress: " + shippingAddress + "]";
            }
        }
        public static class Payer{
              private String paymentMethod; 
              private String status; 
              private PayerInfo payerInfo; 

              public Payer() {
              }

              public String getPaymentMethod(){
                return paymentMethod; 
              }
              public void setPaymentMethod(String input){
                 this.paymentMethod = input;
              }
              public String getStatus(){
                return status; 
              }
              public void setStatus(String input){
                 this.status = input;
              }
              public PayerInfo getPayerInfo(){
                return payerInfo; 
              }
              public void setPayerInfo(PayerInfo input){
                 this.payerInfo = input;
              }
            @Override
            public String toString() {
                return "Payer [paymentMethod: " + paymentMethod + ", status: " + status + ", payerInfo: " + payerInfo + "]";
            }
        }
        public static class Amount{
              private String total; 
              private String currency; 
              private Details details; 

              public Amount() {
              }

              public String getTotal(){
                return total; 
              }
              public void setTotal(String input){
                 this.total = input;
              }
              public String getCurrency(){
                return currency; 
              }
              public void setCurrency(String input){
                 this.currency = input;
              }
              public Details getDetails(){
                return details; 
              }
              public void setDetails(Details input){
                 this.details = input;
              }
            @Override
            public String toString() {
                return "Amount [total: " + total + ", currency: " + currency + ", details: " + details + "]";
            }
        }
        public static class ItemList{

            public ItemList() {
            }
        }
        public static class Details{
              private String subtotal; 
              private String shipping; 
              private String handlingFee; 
              private String insurance; 
              private String shippingDiscount; 

              public Details() {
              }

              public String getSubtotal(){
                return subtotal; 
              }
              public void setSubtotal(String input){
                 this.subtotal = input;
              }
              public String getShipping(){
                return shipping; 
              }
              public void setShipping(String input){
                 this.shipping = input;
              }
              public String getHandlingFee(){
                return handlingFee; 
              }
              public void setHandlingFee(String input){
                 this.handlingFee = input;
              }
              public String getInsurance(){
                return insurance; 
              }
              public void setInsurance(String input){
                 this.insurance = input;
              }
              public String getShippingDiscount(){
                return shippingDiscount; 
              }
              public void setShippingDiscount(String input){
                 this.shippingDiscount = input;
              }
            @Override
            public String toString() {
                return "Details [subtotal: " + subtotal + ", shipping: " + shipping + ", handlingFee: " + handlingFee
                        + ", insurance: " + insurance + ", shippingDiscount: " + shippingDiscount + "]";
            }
        }
        public static class Sale{
              private String id; 
              private String state; 
              private String paymentMode; 
              private String protectionEligibility; 
              private String parentPayment; 
              private String createTime; 
              private String updateTime; 
              private Amount amount; 

              public Sale() {
              }

              public String getId(){
                return id; 
              }
              public void setId(String input){
                 this.id = input;
              }
              public String getState(){
                return state; 
              }
              public void setState(String input){
                 this.state = input;
              }
              public String getPaymentMode(){
                return paymentMode; 
              }
              public void setPaymentMode(String input){
                 this.paymentMode = input;
              }
              public String getProtectionEligibility(){
                return protectionEligibility; 
              }
              public void setProtectionEligibility(String input){
                 this.protectionEligibility = input;
              }
              public String getParentPayment(){
                return parentPayment; 
              }
              public void setParentPayment(String input){
                 this.parentPayment = input;
              }
              public String getCreateTime(){
                return createTime; 
              }
              public void setCreateTime(String input){
                 this.createTime = input;
              }
              public String getUpdateTime(){
                return updateTime; 
              }
              public void setUpdateTime(String input){
                 this.updateTime = input;
              }
              public Amount getAmount(){
                return amount; 
              }
              public void setAmount(Amount input){
                 this.amount = input;
              }
            @Override
            public String toString() {
                return "Sale [id: " + id + ", state: " + state + ", paymentMode: " + paymentMode + ", protectionEligibility: "
                        + protectionEligibility + ", parentPayment: " + parentPayment + ", createTime: " + createTime
                        + ", updateTime: " + updateTime + ", amount: " + amount + "]";
            }
        }
        public static class RelatedResources{
              private Sale sale; 

              public RelatedResources() {
              }

              public Sale getSale(){
                return sale; 
              }
              public void setSale(Sale input){
                 this.sale = input;
              }
            @Override
            public String toString() {
                return "RelatedResources [sale: " + sale + "]";
            }
        }
        public static class Transactions{
              private Amount amount; 
              private ItemList itemList; 
              private List<RelatedResources> relatedResources; 

              public Transactions() {
              }

              public Amount getAmount(){
                return amount; 
              }
              public void setAmount(Amount input){
                 this.amount = input;
              }
              public ItemList getItemList(){
                return itemList; 
              }
              public void setItemList(ItemList input){
                 this.itemList = input;
              }
              public List<RelatedResources> getRelatedResources(){
                return relatedResources; 
              }
              public void setRelatedResources(List<RelatedResources> input){
                 this.relatedResources = input;
              }
            @Override
            public String toString() {
                return "Transactions [amount: " + amount + ", itemList: " + itemList + ", relatedResources: "
                        + relatedResources + "]";
            }
        }
        @Override
        public String toString() {
            return "JSONObjFromPaypalTrx [id: " + id + ", intent: " + intent + ", state: " + state + ", cart: " + cart
                    + ", createTime: " + createTime + ", payer: " + payer + ", transactions: " + transactions + "]";
        }      
    }

这是 jsonPaypalTrx 的日志:

    jsonPaypalTrx: JSONObjFromPaypalTrx [id: PAYID-LXJIHMI92J52777N04488909, intent: Sale, state: approved, cart: 25M35194DL227451S, createTime: 2019-11-18T11:42:41Z, payer: null, transactions: null]

不完整的jsonPaypalTrx是因为我在JSONObjFromPaypalTrx中使用了内部类吗?将每个内部类拆分为单独的 Java 文件对我来说会很尴尬。

感谢您的帮助。

鲍勃

最佳答案

给定 JSON 负载使用混合命名约定:驼峰式大小写和 UPPER_CAMEL_CASE 用于 JSON 对象。因此,您需要实现自己的 FieldNamingStrategy:

class PayPalFieldNamingStrategy implements FieldNamingStrategy {

    @Override
    public String translateName(Field f) {
        return f.getType() == String.class ? f.getName() : FieldNamingPolicy.UPPER_CAMEL_CASE.translateName(f);
    }
}

然后像下面这样注册:

Gson gson = new GsonBuilder()
        .setFieldNamingStrategy(new PayPalFieldNamingStrategy())
        .create();

或者,对于每个对象声明名称如下:

@SerializedName("Payer")
private Payer payer;

关于java - 将 Paypal Checkout 交易转换为 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943604/

相关文章:

java - Java 注释列表是否应该在最后一个条目之后允许一个额外的逗号?

java - 如何在 Eclipse Java 调试器中将 char 数组显示为十六进制字节数组或无符号十进制数?

json - 解析同时包含 HTML 和 Json 数据的网页

ruby - 迭代 Chef Recipe 中的 EncryptedDataBagItem

Paypal 开发人员 - 无法查看我的 REST 应用程序

java - Android map 应用程序未在设备中运行

java - 如何将现有的 .class 添加到现有的 eclipse 项目?

json - 用 sed 替换 JSON 中的 bool 字段

paypal - 在 PayPal 自适应支付调用中设置送货地址(链式和常规)

paypal - 如何找到 Braintree 沙箱的 Paypal 沙箱凭据?