如何在 jersey REST 实现中获取纯 JSON 数据?

How to get plain JSON data in jersey REST implementation?

如果我们有一个 POJO class,那么我们可以将它映射到一些传入 JSON。我正在努力寻找一种方法,通过它我可以将所有普通的 json 值放在里面。

例如

{
    "macro_tasks": [
        {
            "id": "cc5cee68-c1e5-4396-987b-c68559399186",
            "label": "consi-1",
            "name": "Consi 1",
            "project_id": "82d1e463-1bb1-42d3-9adc-9e0d5848d139",
            "creator_id": null,
            "created_at": null,
            "updated_at": null,
            "meta_data": {
                "key1": "value1",
                "key2": 321
          }
        }
    ]
}

这里的meta_data是JSON类型的,里面的值是可以不断变化的。所以我不能用一些 POJO class.

映射它
public class MacroTask {

    private UUID id;
    private String label;
    private String name;

    private UUID projectId;

    private UUID creatorId;

    private String createdAt;

    private String updatedAt;

    private <some data type> meta_data;

//getter and setter

有没有办法获取纯 JSON 数据并在代码中使用它并转储到数据库中[我们使用的是支持 jsonb 类型的 PostgreSQL。]

可以使用地图;喜欢

private Map<String, Object> meta_data;

我使用 Jackson 的 JsonNode 通用 JSON 类型解决了这个问题。我听说它有一些缺点,但我正在试一试。到目前为止,它按预期工作。如果我遇到任何挑战或找到更好的解决方案,我会更新。

我收到以下错误

Can not deserialize instance of java.lang.String out of START_OBJECT

我将此代码用于 json 字符串到 HasMap 的转换。

Map map = mapper.readValue(jsonString, new TypeReference<HashMap<String,String>>(){});

我把它替换成.

Map map = mapper.readValue(jsonString, new TypeReference<HashMap<String,Object>>(){});