[英]Add standalone directive to Jackson XML serialization
我試圖讓 Jackson 像 JAXB 一樣生成 XML 標頭,但我不知道如何添加“standalone='yes'?”
例子:
public class XmlTest {
@XmlRootElement
public static class Book {
}
@Test
public void testBookXml() throws JsonProcessingException {
XmlMapper mapper = new XmlMapper();
mapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
System.out.println("Jackson\n" + mapper.writeValueAsString(new Book()) + "\n");
StringWriter sw = new StringWriter();
JAXB.marshal(new Book(), sw);
System.out.println("JAXB\n" + sw.toString());
}
}
輸出是這樣的:
Jackson
<?xml version='1.0' encoding='UTF-8'?><Book/>
JAXB
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<book/>
我不在乎<Book/> vs <book/>
。 除了字符串操作之外,有沒有辦法讓 Jackson 標頭像 JAXB 一樣?
我遇到了同樣的問題,我通過重新加載類BufferingXmlWriter
(從源代碼復制並修改方法)解決了這個問題,在使用 Jackson 生成 XML 之前必須重新加載
BufferingXmlWriter
com.ctc.wstx.sw.BufferingXmlWriter
復制源代碼writeXmlDeclaration(String version, String encoding, String standalone)
public void writeXmlDeclaration(String version, String encoding, String standalone)
throws IOException
{
// final char chQuote = (mUseDoubleQuotesInXmlDecl ? '"' : '\'');
final char chQuote = '"';
fastWriteRaw("<?xml version=");
fastWriteRaw(chQuote);
fastWriteRaw(version);
fastWriteRaw(chQuote);
if (encoding != null && encoding.length() > 0) {
fastWriteRaw(" encoding=");
fastWriteRaw(chQuote);
fastWriteRaw(encoding);
fastWriteRaw(chQuote);
}
if (standalone == null) {
fastWriteRaw(" standalone=");
fastWriteRaw(chQuote);
fastWriteRaw("yes");
fastWriteRaw(chQuote);
}
fastWriteRaw('?', '>');
}
重新加載
Class.forName("com.ctc.wstx.sw.BufferingXmlWriter");
結果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.