Java 使用名称/值格式从CXF JAX-RS返回映射

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

我们希望编写一个类似以下内容的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;
}
{
   "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

如果只想返回JSON(不支持XML),那么只需从
MyData
中删除所有JAXB注释,就可以得到一个非常好的结构,但不需要包装“MyData”元素(这对我来说似乎是多余的)。例如,您可以使用核心Jackson注释,比如
@JsonIgnore
(而不是JAXB)。如果要添加根包装元素,可以将设置为true。

映射使用什么JSON库?它是如何配置的?我注意到我们在CXF2.7.3下使用Jackson 2.1.2。这是一个非常普通的配置。我怀疑有一个XML映射器或一些可以应用的东西,但这是我不知道的。也许。Lefloh,我会检查一下。我不认为它直接回答了这个问题,但我认为它可能会为我指出一个可能的解决方案。非常感谢。为什么我在这个问题上被否决了?这似乎不是一个毫无价值的问题。我的研究工作包括花很多时间阅读CXF文档和谷歌搜索堆栈溢出的答案。此外,我认为可以将Jackson core注释与JAXB注释混合使用。