Java 将任何对象保存为常规贴图的正确方法是什么<;字符串,对象>;在杰克逊?

Java 将任何对象保存为常规贴图的正确方法是什么<;字符串,对象>;在杰克逊?,java,paypal,jackson,Java,Paypal,Jackson,我正在尝试将类的副本保存为外部数据类型的通用Map表单: Map<String, Object> test1 = objectMapper.convertValue(payoutBatch, new TypeReference<Map<String, Object>>(){}); Map<String, Object> test2 = objectMap

我正在尝试将类的副本保存为外部数据类型的通用
Map
表单:

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

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

我对杰克逊还是个新手,这可能吗?我想知道。

我假设给定一个有效的映射,其中对象可以是任何原语,或者列表或映射,您知道如何使用Jackson将其序列化为JSON,这很简单。因此,我建议您使用单个方法创建一个接口(比如称之为Mappable):

public Map<String, Object> toMap();
公共映射toMap();

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

try
new TypeReference(){}
我尝试将其存储为
Map
,但在尝试转换嵌套值时将映射写入JSON时会产生错误。例如,如果映射有一个内部映射,其中有一个条目是arraylist,那么您得到的
无法将arraylist转换为string
错误。我认为您不能将其设置为泛型。也许您应该从
TypeFactory.defaultInstance().constructMapType(Map.c)创建java类型‌​lass,String.class,Object.class)
嗨,Michael,不幸的是,根据我的帖子,我对第三方类最感兴趣,因为我无法修改源代码。我使用的示例是PayoutBatch和PayoutItemDetails,它们都是通过PayPal Payment Java SDK导入的。好的,然后我将编写自己的实用程序类,可以接受这些类并创建它们的映射表示。然后,您就可以序列化映射了。我想知道是否有一种通用的方法可以在任何时候将任何类C转换为它的映射表示形式M,然后再转换为映射的JSON表示形式J。所以它看起来像这样:
C->mj
Class->Map-JSON
。如果你有什么想法,请告诉我!我的目的是“归档”整个类的表现。这在本质上可以允许保存一个已封送到其Java类表示的整个通用RESTAPI响应。我取得了很大的进步,但我认为我缺乏Java泛型和jackson的专业知识太棒了。好吧,没有通用的开箱即用的方法将任何类序列化到它的映射表示中。如果它是您的类,那么您可以使用Jackson及其注释告诉Jackson您的类应该如何转换。在大多数情况下,无需编写任何附加代码,就可以使用注释完成所有操作。对于任何类的开箱即用序列化,如果该类实现了Serializable接口,则可以将其序列化并反序列化为java内部格式,但不能保证在不同的java版本之间保留该格式。阅读有关可序列化接口的更多信息。
public Map<String, Object> toMap();