我们想要编写一个看起来像这样的API:
@XmlRootElement(name = "MyData")
@XmlAccessorType(XmlAccessType.FIELD)
public static class MyData {
public String name;
public Map<String,String> data;
}
@GET
@Path("/mydata")
public MyData getMyData() {
MyData ret = new MyData();
ret.name = "map data";
ret.data = new HashMap<>();
ret.data.put("a1", "b1");
ret.data.put("a2", "b2");
return ret;
}
但是这里有一个我们似乎无法解决的问题:我们希望它返回一个类似这样的JSON结构:
{
"MyData":{
"name":"map data",
"data":{
"a1": "b1",
"a2": "b2"
}
}
}
我们无法弄清楚如何超越
之类的东西{
"MyData":{
"name":"map data",
"data":{
"entry":[
{
"key":"a1",
"value":"b1"
},
{
"key":"a2",
"value":"b2"
}
]
}
}
}
知道我们怎么做这个吗?我很确定这可以做到,因为我曾经看过它的演示。我们使用的是tomcat,Java 7,CXF 2.7.3和Jackson 2.1.2。两点:
答案 0 :(得分:0)
如果你只想返回JSON(不支持XML),那么只需从MyData
删除所有JAXB注释,你就会得到一个非常好的结构,但没有包装&#34; MyData&#34;元素(这对我来说似乎是多余的)。你可以使用核心Jackson注释,比如@JsonIgnore
(而不是JAXB&#39; s)。如果要添加根环绕元素,可以将WRAP_ROOT_VALUE
设置为true。