繁体   English   中英

在解析gson.toJson(obj)给出null

[英]On parsing gson.toJson(obj) giving null

w当我将本地内部类ShipAddress对象传递给Gson类的toJson()方法时,在解析它时返回null。

public class CrusialDateRest {

  public String getShippingAddressesDetails() {
    Gson gson = new GsonBuilder().create();
    try {

       Collection<ImplAddress> savedAddressBeans = new ArrayList<ImplAddress>();
       Collection<CtFlexField> countryFields = new ArrayList<CtFlexField>();
       Collection<CtFlexField> debitorFields = new ArrayList<CtFlexField>();

       class ShipAddress{
           Collection<ImplAddress> savedAddressBean = new ArrayList<ImplAddress>();
           Collection<CtFlexField> countryField = new ArrayList<CtFlexField>();
           Collection<CtFlexField> debitorField = new ArrayList<CtFlexField>();
            ShipAddress( Collection<ImplAddress> savedAddressBeans, Collection<CtFlexField> countryFields,Collection<CtFlexField> debitorFields){
                savedAddressBean=savedAddressBeans;
                countryField=countryFields;
                debitorField=debitorFields;
            }
        }


         String addrId= XmlParser.getNodeValue(address, Statics.BUYFLOW_NAMESPACE, "AddressId");
         String addrStreet1 = XmlParser.getNodeValue(address, Statics.BUYFLOW_NAMESPACE, "AddrStreet1");
         String addrStreet2 = XmlParser.getNodeValue(address, Statics.BUYFLOW_NAMESPACE, "AddrStreet2");    
         String addrStreet3 = XmlParser.getNodeValue(address, Statics.BUYFLOW_NAMESPACE, "AddrStreet3");

        ImplAddress impladdress = new ImplAddress();
        impladdress.setAddressId(addrId);
        impladdress.setAddrStreet1(addrStreet1);
        impladdress.setAddrStreet2(addrStreet2);
        impladdress.setAddrStreet3(addrStreet3);
        savedAddressBeans.add(impladdress);

        }
     CtFlexField[] flexField =  flexFields.getFlexField();
      for (CtFlexField flex : flexField) {
         if(flex.getBundle().equalsIgnoreCase("Countries")){
             countryFields.add(flex);
         }
         else if(flex.getBundle().equalsIgnoreCase("CommonBundle")){
             debitorFields.add(flex);
         }
     }

      jsonResponse = gson.toJson(new ShipAddress(savedAddressBeans,countryFields,debitorFields));
      OUT.debug("jsonResponse--"+jsonResponse);

    } catch (Exception e) {
      OUT.error("rest method getShippingAddresses error", e);
    }
    return jsonResponse;
  }
}

我应该在方法之外做内部类吗?

还是这是序列化问题?

这很可能是可见性问题。

可以将ShipAddress移到其自己的类文件中,或使其成为public static内部类。

请注意,不能在方法内部声明公共静态类,您必须将类移出getShippingAddressDetails()方法。

暂无
暂无

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

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