简体   繁体   English

将 Paypal 结帐交易转换为 Java Object?

[英]Converting Paypal Checkout Transaction to a Java Object?

I've been working on a Paypal JSON to Java object converter, using Gson. I've been working on a Paypal JSON to Java object converter, using Gson. But, it doesn't generate a full Java object.但是,它不会生成完整的 Java object。 Seems like this conversion would have already been done, but I couldn't find anything.似乎这种转换已经完成,但我找不到任何东西。

My technique is to take the Paypal JSON, do replacements of their non-Java element names, then parse that into a Java object that I've defined. My technique is to take the Paypal JSON, do replacements of their non-Java element names, then parse that into a Java object that I've defined.

Here's what the Gson looks like:这是 Gson 的样子:

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

paypalTrx is the Paypal JSON after the element names are replaced: 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"}}}}]}]}

Here's the Java object I've defined:这是我定义的 Java object:

    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 + "]";
        }      
    }

Here's a log of jsonPaypalTrx:这是 jsonPaypalTrx 的日志:

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

Is the incomplete jsonPaypalTrx due to my use of inner classes inside JSONObjFromPaypalTrx? jsonPaypalTrx 不完整是因为我在 JSONObjFromPaypalTrx 中使用了内部类吗? Splitting each inner class into separate Java files would be awkward for me to do.将每个内部 class 拆分为单独的 Java 文件对我来说会很尴尬。

Thanks for helping.感谢您的帮助。

Bob鲍勃

Given JSON payload uses mixed naming convention: camel case and UPPER_CAMEL_CASE for JSON Objects .给定JSON有效负载使用混合命名约定:骆驼大小写和UPPER_CAMEL_CASE用于JSON Objects So, you need to implement your own FieldNamingStrategy :因此,您需要实现自己的FieldNamingStrategy

class PayPalFieldNamingStrategy implements FieldNamingStrategy {

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

And register it like below:并像下面这样注册:

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

Or, for each object declare name like below:或者,对于每个 object 声明名称,如下所示:

@SerializedName("Payer")
private Payer payer;

Make your member classes static so that they don't need an outer class reference when they're constructed.使您的成员类static以便在构造它们时不需要外部 class 引用。

Like: public static class ShippingAddress .喜欢: public static class ShippingAddress

Gson likely doesn't know how to constructor inner classes, but it will know how to construct static member classes. Gson 可能不知道如何构造内部类,但它会知道如何构造static成员类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM