如何在泽西REST实现中获取普通的JSON数据?

时间:2016-08-20 10:33:41

标签: java json rest jersey-2.0

如果我们有一个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。]

4 个答案:

答案 0 :(得分:1)

我使用Generic JSON类型解决了它,Jackson的JsonNode。我听到它有一些缺点,但我试一试。到目前为止,它的工作符合预期。如果我遇到任何挑战或者找到更好的解决方案,我会更新。

答案 1 :(得分:0)

你可以用map;喜欢

private Map<String, Object> meta_data;

答案 2 :(得分:0)

我遇到以下错误

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

答案 3 :(得分:-1)

为什么不将meta_data用作string类型的字段而不是array?然后,您可以将普通JSON添加为字符串,并在后端使用此值。

//add json as string value to this field    
private String meta_data;