Java Jersey / Jackson:返回动态JSON属性

问题描述 投票:0回答:1

我们使用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,还有元数据...

java json jackson jersey
1个回答
0
投票

您可以让端点返回[C​​0],这将允许您返回任何类型的json。如果您有基本的DTO,则可以将其映射到JsonNode,然后在其中包含任何动态参数。

© www.soinside.com 2019 - 2024. All rights reserved.