使用REST服务(Jersey / Jackson)使用任意键值发送JSON

时间:2013-04-10 21:50:12

标签: java rest jersey jackson

我想从客户端向其他服务发送类似的内容

jsonObj = 
{
   "info" : {
       "field1" : "val1"..
.....
       "fieldN" : "valN"..
   }
}

我不知道如何使用

 Jersey and Jackson in Java 

来使用休息服务处理此问题

我不想使用具有N字段的Jackson属性创建新的信息类,因为它们将始终更改。我只想抓住jsonObject中的jsonObject,并将其作为JsonObject进行操作。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

假设您有一个正在读取结果的根对象,您可以在jsonObj中将docInfo定义为Map<String, Object>。这可能可以工作,但我现在不能试一试。

如果您没有根对象,可以使用Map<String, Object>作为根对象并从那里进行播放。该Map可以包含嵌套json对象的其他映射。

答案 1 :(得分:3)

是的,使用带有嵌入式地图的包装器对象,如@digitialjoel建议的那样。这是一个具体的例子:

class DocInfo {
    private Map<String, Object> docInfo;

    public DocInfo() {
        super();
    }

    public DocInfo(final Map<String, Object> docInfo) {
        super();
        this.docInfo = docInfo;
    }

    // Getters, setters
}

final Map<String, Object> data = new LinkedHashMap<String, Object>(4);
data.put("field1", "value1");
data.put("field2", "value2");
data.put("field3", "value3");
data.put("field4", "value4");
final DocInfo info = new DocInfo(data);
final ObjectMapper mapper = new ObjectMapper();
final String json = mapper.writeValueAsString(info);
System.out.println(json);

输出:

  

{ “DOCINFO”:{ “字段1”: “VALUE1”, “FIELD2”: “VALUE2”, “字段3”: “值3”, “字段4”: “VALUE4”}}