11

我正在尝试使用 Jackson 创建一些 xml,但无法像我需要的那样显示列表。我正进入(状态:

<Messages>
  <Messages>...</Messages>
  <Messages>...</Messages>
</Messages>

我希望它看起来像:

<Messages>
  <Message>...</Message>
  <Message>...</Message>
</Messages>

我的代码如下所示:

  public List<Message> messages;

无论我如何命名该变量,所有子元素的名称都是相同的。我确信这已在其他地方得到解答,但我找不到任何可以解决我的问题的东西。谢谢您的帮助。

4

5 回答 5

26

我找到了一种简单的方法来做到这一点而无需添加更多依赖项。您只需使用注释:

@JacksonXmlElementWrapper(localName = "Messages")
@JacksonXmlProperty(localName = "Message")

这个问题为我指明了正确的方向。 Jackson XML 为容器类型全局设置元素名称您还可以在此处的 github 页面上阅读有关此注释的信息

于 2013-06-13T20:26:10.837 回答
5

试试这样的 JAXB 注解:

 @XmlElementWrapper(name = "Messages")
  // XmlElement sets the name of the entities
  @XmlElement(name = "Message")
  public List<Message> messages;

请参阅http://wiki.fasterxml.com/JacksonJAXBAnnotations以将 JAXB 注释与 Jackson 一起使用。

这里有一个很好的 JAXB 教程:

http://www.vogella.com/articles/JAXB/article.html

和这里:

https://jaxb.java.net/tutorial/index.html

于 2013-06-12T20:22:16.873 回答
4

这对于字符串列表非常有效。

XML

<Messages>
     <Message>msg1</Message>
     <Message>msg2</Message>
     <Message>msg3</Message>
</Messages>

杰克逊密码

@JacksonXmlElementWrapper(localName = "Messages")
@JacksonXmlProperty(localName = "Message")
public List<String> messages;
于 2018-05-08T15:48:36.727 回答
2

您也可以尝试使用:

@JacksonXmlRootElement(localName = "Messages")
class Messages{
    @JacksonXmlProperty(localName = "Message")
    List<String> message = new ArrayList<>();

    public List<String> getMessage() {
        return message;
    }

    public void setMessage(String message) {
       this.message.add(message);
    }
}
于 2016-11-28T07:21:01.167 回答
-1

作为另一种选择,您可以通过更改 XML 来完成此操作而无需注释。您可以将 XML 更改为,

<messages>
  <Message>
    <value>"foo"</value>
  </Message>
  <Message>
    <value>"bar"</value>
  </Message>
</messages>

并将Java更改为

class Foobar {
  List<Message> messages;
}
class Message {
  String value;
}

然后 Messages 将包含 Message 类的两个对象,一个值成员等于“foo”,另一个值成员等于“bar”。

于 2017-05-23T15:21:01.960 回答