java - 使用 JAXB 将列表包装器转换为列表

标签 java json jaxb cxf binding

我正在尝试使用 JAXB 绑定(bind)注释来注释一组数据对象,以便可以使用 CXF 将这组数据对象正确编码(marshal)为 JSON。我遇到了一个问题,该类基本上只是 ArrayList 的包装器:

class IntegerListWrapper {
    private ArrayList<Integer> integerList;
    ...
}

我的一些数据对象引用了这个类:

class DataObjectFoo {
    ...
    public IntegerListWrapper getDataIDs() {
        ...
    }
    ...
}

我正在寻找的输出是:

"DataObjectFoo" : {
  "dataIDs" : [1, 2, ..., n] // Array of Data IDs
}

我尝试注释 IDList 类本身,但它给我留下了这个:

"DataObjectFoo" : {
  "dataIDs" : { "integerList" : [1, 2, ..., n] } // Extra nesting
}

我尝试编写 XmlAdapter 但结果好坏参半:

// Throws an error... "Can't bind to interface"
public final class IDListAdapter extends XmlAdapter<List<Integer>, IDList> {
// Does not produce any output
public final class IDListAdapter extends XmlAdapter<ArrayList<Integer>, IDList> {
// Produces output with extra nesting like above
public final class IDListAdapter extends XmlAdapter<Integer[]>, IDList>

所以我有两个问题:

  1. 如何获得所需的输出(无需将 IDList 转换为数据对象中的其他内容)?
  2. 为什么第二个 XmlAdapter(使用 ArrayList)没有产生输出?

最佳答案

我不确定你可以使用它周围的额外包装类。您不能只让“getDataIds()”调用返回列表吗?

关于java - 使用 JAXB 将列表包装器转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4393590/

相关文章:

java - 如何测试消息队列客户端?

java - 为什么 AudioManager 会泄漏?

django - 用 Django 返回 GeoJson

javascript - 将日期从 JSON 格式化为 Datepicker 字段

jaxb - AIX/IBM Java 上的 cxf、jaxb - CollisionCheckStack 问题

java - 在 Hadoop 上执行 java 程序

JavaFx - 为什么不能重写方法 "updateItem"?

javascript - 如何使用 Vue.js 访问 API?

java - JAXB 如何避免对象的重复/覆盖

java - JAXB 避免保存默认值