【发布时间】:2014-07-10 08:01:41
【问题描述】:
我遇到了一个问题。当我的 POJO 被 Jersey 客户端通过调用反序列化时
jersey.api.ClientResponse#getEntity(OrderCostSummary.class)
响应 json 中的所有字段,即 subTotal、shippingCost、tax 和 total 均为 null。
我最初认为这将是与 Money 类有关的问题,即 ObjectMapper 不知道如何反序列化此类,但我有其他 api 调用返回响应实体,其中包含反序列化没有任何问题的 Money 字段。
这是从服务器返回的 JSON:
{ "orderCostSummary":{
"subTotal":{
"amount":"9.99",
"currency":"GBP"
},
"shippingCost":{
"money": {
"amount":2.95,
"currency":"GBP"
}
},
"tax":{
"amount":0,
"currency":"GBP"
},
"total":{
"amount":12.94,
"currency":"GBP"
}}}
POJO
public class OrderCostSummary {
private Money subTotal;
private Money shippingCost;
private Money tax;
private Money total;
/**
* Instantiates a new Order cost summary.
*/
public OrderCostSummary() {
}
public Money getSubTotal() {
return subTotal;
}
public void setSubTotal(Money subTotal) {
this.subTotal = subTotal;
}
public Money getShippingCost() {
return shippingCost;
}
public void setShippingCost(Money shippingCost) {
this.shippingCost = shippingCost;
}
public Money getTax() {
return tax;
}
public void setTax(Money tax) {
this.tax = tax;
}
public Money getTotal() {
return total;
}
public void setTotal(Money total) {
this.total = total;
}
public class Money {
private BigDecimal amount;
private Currency currency;
我的钱POJO
public Money() { }
public Money(BigDecimal amount, Currency currency) {
this.amount = amount;
this.currency = currency;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
【问题讨论】:
-
这听起来很像错误的反序列化尝试转换不是 OrderCostSummary 的对象。不过,我想知道添加 @JsonProperty 注释是否会有所帮助。
标签: java rest jersey deserialization