【问题标题】:Mule JSON data to objects骡 JSON 数据到对象
【发布时间】:2013-06-28 06:53:07
【问题描述】:

我有一个 json 对象

data = { 
'ad': {
    "date":"2013-06-05",
    "catagory":"6",
    "subcatagory":"5",
    "text":"John john",
    "ssn":"1306743999",
    "email":"jonbrynjar@365.is",
    "phone":"8612001"
},
'cc-info': {
    "amount": "70",
    "cardNumber": "4222222222222",
    "expiryDate": "1215",
    "currency": "ISK"
},
'dates': [
    { 'date': '2013-06-18', 'media': 1 },
    { 'date': '2013-06-19', 'media': 3 }
]
}

然后我有一个子流,它采用该 json 对象的“cc-info”部分并使用该数据调用第三方服务。 要提取 json 对象的“cc-info”部分,我使用 @JsonAutoDetect 类

@JsonAutoDetect
public class Handpoint {

private String amount;
private String cardNumber;
private String expiryDate;
private String currency;

public String getAmount() { return this.amount; }
public void setAmount(String amount) { this.amount = amount; }

public String getCardNumber() { return this.cardNumber; }
public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }

public String getExpiryDate() { return this.expiryDate; }
public void setExpiryDate(String expireDate) { this.expiryDate = expireDate; }

public String getCurrency() { return this.currency; }
public void setCurrency(String currency) { this.currency = currency; }
}

当我发送整个 json 对象时,我得到一个错误。 问题是:我是否必须将 json 对象中的每个变量都放入我的 @JsonAutoDetect 类中? 或者什么是最好的做法。 当我只发送 json objcet 的“cc-info”部分时,我已经验证了我的代码有效。

【问题讨论】:

    标签: java json jackson mule


    【解决方案1】:

    你不需要那个@JsonAutoDetect,它与没有参数的默认值没有什么不同。

    但如果你的问题是你是否可以忽略未知属性,答案是肯定的。 Here 有几种方法。

    例如:

    mapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
    

    会成功的。

    【讨论】:

      【解决方案2】:

      有一种更简单的方法可以将您的 JSON 元素转换为一系列对象。您是否尝试过 Google GSon 库?有一个样本: import com.google.gson.Gson;

               Gson gson = new Gson();
               Handpoint testing = gson.fromJson(data, Handpoint.class);
      
               System.out.println("Amount: " + testing.getAmount());
      

      另一方面,如果你想反序列化包含数组的日期,你最好看看这里: Gson Array deserialization

      【讨论】:

      • 我的paylaod在这里public ClientResponse ExtractVariablesFromPayload(@Payload JsonObject jsonObject) { ClientResponse callHandpointRestResponse = CallHandpointRest(jsonObject.ccInfo.getCurrency(), jsonObject.ccInfo.getAmount(), jsonObject.ccInfo.getCardNumber(), jsonObject.ccInfo.getExpiryDate()); return callHandpointRestResponse; }这个类我在这里使用我想要的部分json工作@JsonIgnoreProperties({"ad", "dates"}) public class JsonObject { @JsonProperty("cc_info") CcInfo ccInfo; }当java类完成执行时,我怎样才能返回剩余的有效负载?
      • @JonB 伙计,用代码更新你的问题,不要将代码放在 cmets 中,这只是一堆不可读的废话。
      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2015-06-22
      • 2014-04-26
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多