当前位置: 首页 > 面试题库 >

在Jaxb中编组地图的问题

王昊
2023-03-14
问题内容

我有一个包含人类地图的阶级 世界 。如果将类世界编组,则会得到以下输出:

<world>
    <humans>
        <human key="2">
            <value>
                <name>Tom</name>
            </value>
        </human>
        <human key="1">
            <value>
                <name>Max</name>
            </value>
        </human>
    </humans>
</world>

但我不想显示“值”标签。它应该看起来像:

<world>
    <humans>
        <human key="2">
            <name>Tom</name>
        </human>
        <human key="1">
            <name>Max</name>
        </human>
    </humans>
</world>

这可能吗?

这是世界和人类的代码:

@XmlRootElement
public class Human {

    @XmlElement
    private String name;

    public Human(){}
}

@XmlRootElement
public class World {

    private Map<String, Human> humans = new HashMap<String, Human>();

    public World(){}

    @XmlElementWrapper( name = "humans")
    @XmlElement(name = "human")
    public HumanEntry[] getMap() {
        List<HumanEntry> list = new ArrayList<HumanEntry>();
        for (Entry<String, Human> entry : humans.entrySet()) {
            HumanEntry mapEntry =new HumanEntry();
            mapEntry.key = entry.getKey();
            mapEntry.value = entry.getValue();
            list.add(mapEntry);
        }
        return list.toArray(new HumanEntry[list.size()]);
    }

    public void setMap(HumanEntry[] arr) {
        for(HumanEntry entry : arr) {
            this.humans.put(entry.key, entry.value);
        }
    }

    public static class HumanEntry {
        @XmlAttribute
        public String key;

        @XmlElement
        public Human value;
    }

    public void addHuman(String key, Human human){
        this.humans.put(key, human);
    }
}

问题答案:

正如所指出的ilcavero一个XmlAdapter可用于在JAXB申请的替代映射到地图(或任何类型的)。下面是一个具体示例的链接:

  • http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html

想要查询更多的信息

  • http://blog.bdoughan.com/search/label/XmlAdapter


 类似资料:
  • 问题内容: 我在代码中遇到问题。 当我在本地(http:// localhost:8080 / home / rest / parameter / )上运行应用程序时,出现以下错误。我的主要要求是在xml上的UI上显示所有信息。 org.jboss.resteasy.spi.UnhandledException:com.sun.xml.bind.v2.runtime.IllegalAnnotati

  • 问题内容: 我正在尝试与JAXB进行封送处理。 我的输出就像 但是我需要像这样的输出 我正在使用以下代码来执行此操作。如果我取消注释代码,则会出现属性绑定异常。没有它,我可以编译,但无法获得所需的确切输出。 和我的豆lo 转接器类别 问题答案: 您可以执行以下操作: 适配器CDATA 根 该注释用于指定的应该被使用。 演示版 我必须包装一个以获得所需的效果。另请注意,设置方法意味着它负责该操作的所

  • 我有一个XML要与JAXB解组。如果我从元素中删除所有名称空间属性,代码运行良好,但是如果我保留名称空间属性的话,在解组后会得到一个空对象。 XML是这样的: 我的动物豆是这样的: 猫豆就像: 在运行时,我得到一个空对象。我试图从属性中删除< code>"z:",得到了这个异常: 如果我从猫和动物中删除命名空间,我会得到这个例外: 下面是解组的最终代码。最后一行给出了一个空指针异常 我不确定如何处

  • 问题内容: 我在使用Marshaller.JAXB_FRAGMENT属性成功编组时遇到了一些麻烦。这是我尝试输出的XML的简单版本。 的和元件基本上围住了大量的只是容器元素&元件。我目前正在尝试在马歇尔(Marshall)上编组。 是否有可能先将and 元素编组,然后再将其编组到element 上,然后将输出包含在标记中? 当我在WorkSet级别进行封送处理时,它将属性附加到WorkSet标记中

  • 问题内容: 我正在构建一系列链接的类,我希望它们的实例能够编组到XML,以便可以将它们保存到文件中并在以后再次读取。 目前,我正在使用以下代码作为测试用例: XML输出为: 元素为空是否有原因?我希望它包含日期(即)的字符串表示形式。为此,我是否需要编写自己的代码? 输出为: 问题答案: 您将必须创建一个这样的: 并使用 另请参阅是否要在程序包级别定义适配器。

  • 问题内容: 我正在尝试使用JAXB的自省功能来编组和分解所有使用JAXB批注标记的现有域对象。大多数事情都按预期运行,但是要获得一个相当简单的类进行序列化,我会遇到很多麻烦。此类在许多bean上用作@XmlElement,看起来像: 我尝试执行以下操作,但没有成功,JAXB仍然对接口Comparable感到愤怒。 将Range和DoubleRange都用作bean getter的返回类型会产生如下