在杰克逊中将任何对象保存为通用 Map<String、Object>的正确方法是什么?



我正在尝试以通用Map<String, Object>形式保存外部数据类型的类副本:

Map<String, Object> test1 = objectMapper.convertValue(payoutBatch, 
new TypeReference<Map<String, Object>>(){});
Map<String, Object> test2 = objectMapper.convertValue(payoutItemDetails,
new TypeReference<Map<String, Object>>(){});

PayoutBatchPayoutItemDetails都是从PayPal付款 Java SDK 导入的,因此无法进行注释。但是尝试转换它们会得到:

Class com.paypal.api.payments.PayoutBatch not subtype of 
[map type; class java.util.Map, [simple type, class java.lang.Object] ->
[simple type, class java.lang.Object]]

我对杰克逊还很陌生,所以这可能吗?想知道。

我假设给定一个有效的 Map,其中 Object 又可以是任何原语,或者 List 或 Map,您知道如何使用 Jackson 将其序列化为 JSON,这是微不足道的。所以我建议你用单一的方法创建一个接口(比如说称之为Mappable(:

public Map<String, Object> toMap();

然后,您希望使用 Jackson 序列化为 JSON 的任何类都应实现此接口。然后,每个类将实现一个方法,该方法将生成表示类的 Map,然后您可以将此 Map 传递给序列化。

相关内容

最新更新