我们使用jackson向端点的JSON反序列化Java对象(DTO)。这很好。但是,我有一个奇怪的问题。
假设我们有一个对象User,并且有附加到该用户的元数据。元数据实际上可以是客户可以想到的任何东西,因此这是非常动态的。
客户端可以发出请求,以检索特定用户的特定元数据属性。假设客户希望具有以下元数据属性:age和favouriteTree(因为有些人拥有一个,对吗?关键是,元数据可以是任何东西,我们事先不知道)。
我想返回以下JSON:
{
"userId" : 1,
"age" : 22,
"favouriteTree" : "Maple Tree"
}
我可以简单地创建一个Java POJO,其中包含一个int userId,一个int age和一个String favouriteTree。这样,我们可以让Jackson将其反序列化为JSON,一切都很好。
但是,下一次客户端使用相同的端点时,它可能会请求不同的属性,例如:colorEyes和favouriteFood,在这种情况下,我想返回:]
{ "userId" : 1, "colorEyes" : "blue", "favouriteFood" : "Pizza" }
现在,对于这些类型的元数据,我还需要另一个Java POJO来像通常一样反序列化它。但是由于元数据可以是任何东西,所以我们不能这样做,因为我们不希望继续在代码中添加POJO,因为不同的客户会有不同的需求。
在Java中是否有通用的方法?
编辑:
我知道我可以做类似的事情:
{ "userId": 1, "metadata": [{ "key": "colorEyes", "value": "blue" }, { "key": "favouriteFood", "value": "Pizza" } ] }
但是我想避免这种情况。
我们使用jackson向端点的JSON反序列化Java对象(DTO)。这很好。但是,我有一个奇怪的问题。假设我们有一个对象User,还有元数据...
您可以让端点返回[C0],这将允许您返回任何类型的json。如果您有基本的DTO,则可以将其映射到JsonNode
,然后在其中包含任何动态参数。