FasterXML jackson-dataformat-xml 序列化版本和未添加到 xml 的编码

2022-09-02 11:17:09

嗨,我正在使用更快的xml(https://github.com/FasterXML/jackson-dataformat-xml/wiki)将java POJO对象序列化为xml。当我这样做时,我得到了xml,但它没有任何版本和xml文件中的编码。这是我需要的格式

<?xml version="1.0" encoding="utf-8"?>
<SampleRequest>
... 
</SampleRequest>

但我只得到了这个

<SampleRequest>
... 
</SampleRequest>

是否有任何配置需要在杰克逊更快的xml注释中添加。


答案 1

您可以配置编写 XML 标头。XmlMapper

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure( ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true );

例如:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
import java.io.IOException;

public class Xml {
    public static void main(String[] args) throws IOException {
     // Important: create XmlMapper; it will use proper factories, workarounds
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        xmlMapper.writeValue(System.out, new SampleRequest());
    }
}

class SampleRequest{
    public int x = 1;
    public int y = 2;
}

这将生成输出:

<?xml version="1.0" encoding="UTF-8"?>
<SampleRequest>
   ...
</SampleRequest>

如果要将版本设置为 1.1 而不是 1.0,请使用 .ToXmlGenerator.Feature.WRITE_XML_1_1

请注意,Faster-XML 团队建议使用 Woodstox 库。如果您使用它,可以设置一些其他配置。在所有这些中,有一个与设置双引号有关:

public static final String P_USE_DOUBLE_QUOTES_IN_XML_DECL="com.ctc.wstx.useDoubleQuotesInXmlDecl";

WstxOutputProperties.java

有关更多详细信息,请查看配置Woodstox解析器


答案 2

对于那些想知道如何将单引号更改为双引号的人:

String propName = com.ctc.wstx.api.WstxOutputProperties.P_USE_DOUBLE_QUOTES_IN_XML_DECL;
xmlMapper.getFactory()
         .getXMLOutputFactory()
         .setProperty(propName, true);

推荐