Java 如何使用FasterXML库序列化POJO列表

Java 如何使用FasterXML库序列化POJO列表,java,xml,jackson,fasterxml,Java,Xml,Jackson,Fasterxml,我正在使用FasterXML序列化POJO。我想序列化我的POJO列表。序列化signle POJO时,我得到了预期的xml(有一个问题-->问题2),以下是我的代码: List<Movie> movies = new ArrayList<>(); // add movies JacksonXmlModule module = new JacksonXmlModule(); module.setDefaultUseWrapper(false); xmlMapper = n

我正在使用FasterXML序列化POJO。我想序列化我的POJO列表。序列化signle 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);
List movies=new ArrayList();
//添加电影
JacksonXmlModule模块=新的JacksonXmlModule();
module.setDefaultUseWrapper(false);
xmlMapper=新的xmlMapper(模块);
xmlMapper.disable(MapperFeature.AUTO_DETECT_创建者,
MapperFeature.AUTO\u DETECT\u字段,
MapperFeature.AUTO\u DETECT\u getter,
MapperFeature.AUTO\u DETECT\u是\u getter,
MapperFeature.AUTO\u DETECT\u SETTERS,
MapperFeature。使用\u getter\u作为\u setter);
字符串xml=xmlMapper.writeValueAsString(电影);
我明白了:

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

以下是我想要的:

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


  • 当我序列化一部电影时,我得到以下信息:

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

  • 有没有可能得到这个:

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

    您可能需要为
    电影
    变量添加注释。(很可能是将其拉出到字段中,或者声明一个对象来封装它。)检查此页面上的注释以查看是否有匹配的内容。对不起,我不能说得更具体了


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

    问题是Java类型擦除通常会使集合和映射类型(即使是JSON)出现问题;但是XML还有其他问题

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

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

    我不喜欢看电影。我有电影课好的,谢谢。关于我的第二个问题,您有什么想法吗?如果您指的是空XML标记与开始/结束元素,那么可以通过配置底层XML库(至少在使用Woodstox的情况下)实现这一点。若您的意思是更改item元素的名称,那个就更麻烦了。我只是使用Woodstox提供的FasterXML,但我不知道如何配置它。我刚刚在pom中添加了woodstox依赖项。我的意思是,您可以使用特定的
    XMLInputFactory
    和/或
    XMLOutputFactory
    实例来构造
    XmlMapper
    (这些是Stax API抽象,由Woodstox通过其
    WstxInputFactory
    WstxOutputFactory
    实现)来使用。您可以使用不同的属性预先配置所述工厂。但由于我不记得什么输出设置可以用来强制写出空元素,我想这是没有意义的