【问题标题】:Sending JSON with arbitrary key values using REST service (Jersey/Jackson)使用 REST 服务 (Jersey/Jackson) 发送带有任意键值的 JSON
【发布时间】:2013-04-10 21:50:12
【问题描述】:
我想把这样的东西从客户端发送到其他服务
jsonObj =
{
“信息”:{
“field1”:“val1”..
......
“字段N”:“valN”..
}
}
我不确定如何使用休息服务来处理这个问题
Java 中的 Jersey 和 Jackson
我不想使用带有 N 字段的 Jackson 属性来创建新的信息类,因为它们总是会改变。我只想获取 jsonObject 内部的 jsonObject 并将其作为 JsonObject 进行操作。
有什么想法吗?
【问题讨论】:
标签:
java
rest
jersey
jackson
【解决方案1】:
假设您有一个正在读取结果的根对象,您可以在 jsonObj 中将 docInfo 定义为 Map<String, Object>。这可能会起作用,但我现在不能尝试。
如果您没有根对象,您可以使用Map<String, Object> 作为您的根对象并从那里开始使用它。该 Map 可以包含嵌套 json 对象的其他映射。
【解决方案2】:
是的,按照@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":{"field1":"value1","field2":"value2","field3":"value3","field4":"value4"}}