杰克逊用解包的根解析JSON,但没有设置@JsonRootName的能力

其余服务响应

<transaction><trxNumber>1243654</trxNumber><type>INVOICE</type></transaction>

或JSON中:

{"transaction":{"trxNumber":1243654,"type":"INVOICE"}}

使用时没有问题:

mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true)

和作为结果类

@JsonRootName("transaction")

public class Transaction {

private String trxNumber;

private String type;

//getters and setters

}

但是实际上我应该使用第3方jar中的Transaction类,与上面的完全一样,

所以我最终

Could not read JSON: Root name 'transaction' does not match expected ('Transaction') for type...

有什么方法可以强制Jackson解析到Transaction类,而无需在Transaction类本身中添加任何内容(因为我将此文件作为二进制jar的一部分来获取)?

我已经尝试过自定义PropertyNamingStrategy,但似乎只与字段和getter / setter名称有关,而与类名称无关。

Java7,杰克逊2.0.5。

有什么建议?谢谢。

回答:

您可以使用mixin功能来做到这一点。您可以像这样创建简单的界面/抽象类:

@JsonRootName("transaction")

interface TransactionMixIn {

}

现在,您必须配置ObjectMapper对象:

ObjectMapper mapper = new ObjectMapper();

mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);

mapper.addMixInAnnotations(Transaction.class, TransactionMixIn.class);

最后,您可以使用它反序列化JSON:

mapper.readValue(json, Transaction.class);

第二种选择-您可以为类编写自定义反序列化器Transaction

以上是 杰克逊用解包的根解析JSON,但没有设置@JsonRootName的能力 的全部内容, 来源链接: utcz.com/qa/423332.html

回到顶部