【问题标题】:How to get plain JSON data in jersey REST implementation?如何在球衣 REST 实现中获取纯 JSON 数据?
【发布时间】:2016-12-27 10:40:48
【问题描述】:

如果我们有一个 POJO 类,那么我们可以用一些传入的 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 类来映射它。

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。]

【问题讨论】:

    标签: java json rest jersey-2.0


    【解决方案1】:

    你可以使用地图;喜欢

    private Map<String, Object> meta_data;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我收到以下错误

        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>>(){});
        

        【讨论】:

          猜你喜欢
          • 2014-12-11
          • 2014-05-21
          • 2016-06-04
          • 2012-12-27
          • 2021-03-18
          • 1970-01-01
          • 2019-04-03
          • 2014-02-12
          相关资源
          最近更新 更多