gpt4 book ai didi

java - 如何使用 FasterXML 库序列化 POJO 列表

转载 作者:行者123 更新时间:2023-12-02 04:50:27 24 4
gpt4 key购买 nike

我正在使用 FasterXML 来序列化 POJO。我想序列化我的 POJO 列表。当序列化一个 POJO 时,我得到了预期的 xml(有一个问题 --> 问题 2)这是我的代码:

List<Movie> movies = new ArrayList<>();
// add movies
JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
xmlMapper = new XmlMapper(module);
xmlMapper.disable(MapperFeature.AUTO_DETECT_CREATORS,
MapperFeature.AUTO_DETECT_FIELDS,
MapperFeature.AUTO_DETECT_GETTERS,
MapperFeature.AUTO_DETECT_IS_GETTERS,
MapperFeature.AUTO_DETECT_SETTERS,
MapperFeature.USE_GETTERS_AS_SETTERS);
String xml = xmlMapper.writeValueAsString(movies);

我明白了:

<ArrayList>
<item imdbID="tt0077687" title="The Hobbit" year="1977"/>
</ArrayList>

这就是我想要的:

<movies>
<movie imdbID="tt0077687" title="The Hobbit" year="1977"/>
<movie imdbID="tt0077687" title="title2" year="1977"/>
</movies>

<movie imdbID="tt0077687" title="The Hobbit" year="1977"/>
<movie imdbID="tt0077687" title="title2" year="1977"/>
  • 当我连载一部电影时,我得到:

  • 是否可以得到这个:

    <movie imdbID="tt0077687" title="The Hobbit" year="1977"><movie>

    最佳答案

    作为一般规则,不要尝试直接将 ListMap 或数组序列化为根级值:始终使用 Bean (POJO)。属性可以是任何类型,递归地。

    问题在于,Java 类型删除通常会给集合和 Map 类型带来问题(即使使用 JSON);但 XML 还存在其他问题。

    因此,虽然看起来没有必要,但我发现使用一个简单的对象作为根值是最安全的,即使它只是类似:

    public class Response {
    public List<Movie> movies;
    }

    话虽如此,更改根元素的名称可以通过多种方式完成。一种可能性是使用 Jackson 注释 @JsonRootName (尽管其中有“Json”,但它适用于所有格式)。

    或者,您可以使用ObjectWriter,覆盖根名称:

    String xml mapper.writer().withRootName("movies").writeValueAsString(movies);

    关于java - 如何使用 FasterXML 库序列化 POJO 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29288408/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com