Java 使用名称/值格式从CXF JAX-RS返回映射
我们希望编写一个类似以下内容的API:Java 使用名称/值格式从CXF JAX-RS返回映射,java,jaxb,cxf,jax-rs,Java,Jaxb,Cxf,Jax Rs,我们希望编写一个类似以下内容的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
@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;
}
{
"MyData":{
"name":"map data",
"data":{
"a1": "b1",
"a2": "b2"
}
}
}
我们不知道如何超越这样的东西
{
"MyData":{
"name":"map data",
"data":{
"entry":[
{
"key":"a1",
"value":"b1"
},
{
"key":"a2",
"value":"b2"
}
]
}
}
}
你知道我们该怎么做吗?我很确定这是可以做到的,因为我曾经看过它的演示。我们正在使用tomcat、Java7、CXF2.7.3和Jackson 2.1.2。两点:
- 请注意,它不必包含一个映射:我们所需要的只是marsall一组键/值,这些键事先不知道
- 我们必须向两个方向前进——我们需要在表示中使用这种语法实现PUT/POST和GET
MyData
中删除所有JAXB注释,就可以得到一个非常好的结构,但不需要包装“MyData”元素(这对我来说似乎是多余的)。例如,您可以使用核心Jackson注释,比如@JsonIgnore
(而不是JAXB)。如果要添加根包装元素,可以将设置为true。映射使用什么JSON库?它是如何配置的?我注意到我们在CXF2.7.3下使用Jackson 2.1.2。这是一个非常普通的配置。我怀疑有一个XML映射器或一些可以应用的东西,但这是我不知道的。也许。Lefloh,我会检查一下。我不认为它直接回答了这个问题,但我认为它可能会为我指出一个可能的解决方案。非常感谢。为什么我在这个问题上被否决了?这似乎不是一个毫无价值的问题。我的研究工作包括花很多时间阅读CXF文档和谷歌搜索堆栈溢出的答案。此外,我认为可以将Jackson core注释与JAXB注释混合使用。