Java 如何使用FasterXML库序列化POJO列表
我正在使用FasterXML序列化POJO。我想序列化我的POJO列表。序列化signle POJO时,我得到了预期的xml(有一个问题-->问题2),以下是我的代码: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
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
实现)来使用。您可以使用不同的属性预先配置所述工厂。但由于我不记得什么输出设置可以用来强制写出空元素,我想这是没有意义的