编程语言
首页 > 编程语言> > java-如何让CXF了解Map>?

java-如何让CXF了解Map>?

作者:互联网

我的宁静方法返回Map< String,List< MyBean>>.但是我不知道如何获取CXF和JAXB来将其序列化为XML.

我希望它看起来像这样(尽管只要它在两侧都能起作用,我都不会为它的序列化而烦恼);

<response>
  <items key="a">
    <item>
      ....
    </item>
    <item>
      ....
    </item>
  </items>
  <items key="b">
    <item>
      ....
    </item>
  </items>
</response>

如果我只返回地图,我会得到;

[org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor]
No message body writer has been found
for response class HashMap.

如果尝试使用包装对象,则会得到;

[org.apache.cxf.jaxrs.provider.AbstractJAXBProvider]
java.util.List is an interface, and
JAXB can’t handle interfaces.

有什么建议么?这仅仅是CXF问题(我正在使用2.3.2版)吗?我确定我在泽西岛也有过类似的工作.

解决方法:

没有什么比离开屏幕更清晰的时间了.我在午餐时就发现了这一点,答案是根本不使用地图,而是使用列表包装器列表.

@XmlRootElement
public class MyResponse {

  private List<ItemListWrapper> items;

  //getters and setters
}

@XmlType
public class ItemListWrapper {

  private String key;
  private List<Item> items;

  @XmlAttribute
  public String getKey() {
    return this.key;
  }

  //rest of the getters and setters

}

@XmlType
public class Item {
  //just a bean
}

标签:jax-rs,jaxb,cxf,java
来源: https://codeday.me/bug/20191102/1992523.html