2

我有一个 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 对象的“cc-info”部分时,我已经验证了我的代码是否有效。

4

2 回答 2

1

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

但是,如果您的问题是您是否可以忽略未知属性,那么答案是肯定的。这里有几种方法。

例如:

mapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);

会成功的。

于 2013-06-27T22:53:07.687 回答
0

有一种更简单的方法可以将您的 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

于 2013-06-21T14:12:20.217 回答