spring-如何使用名称空间前缀将POJO序列化为xml
作者:互联网
Spring提供了几种通过HttpMessageConverter将POJO转换为XML的方法.但是,我很难找到一个支持带有前缀的自定义名称空间的对象.
例如来自
public class Student {
String name;
String address;
Integer score;
}
至
<?xml version="1.0" encoding="UTF-8"?>
<foo:Student xmlns:foo="http://schemas.foo.com/student">
<foo:name>Some Name</foo:name>
<foo:address>Address</foo:address>
<foo:score>95</foo:score>
</foo:Student>
我很高兴地将MappingJackson2HttpMessageConverter与jackson-dataformat-xml一起使用,直到我意识到它不支持自定义前缀.
然后,我研究了将MarshallingHttpMessageConverter与XStreamMarshaller结合使用,只是发现XStream也不支持自定义前缀.
谁能给我一个示例,说明如何使用自定义名称空间前缀将POJO序列化为xml?谢谢.
解决方法:
我设法解决了杰克逊的类似问题.首先,您必须使用woodstox XML处理器.
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
<version>4.4.0</version>
</dependency>
比我以这种方式添加了名称空间perfix / uri映射:
XmlMapper mapper = new XmlMapper();
// override default instance of WstxOutputFactory
mapper.getFactory().setXMLOutputFactory(new WstxOutputFactory() {
@Override
public XMLStreamWriter createXMLStreamWriter(Writer w) throws XMLStreamException {
mConfig.setProperty(WstxInputProperties.P_RETURN_NULL_FOR_DEFAULT_NAMESPACE, true);
XMLStreamWriter result = super.createXMLStreamWriter(w);
result.setPrefix("xlink", "http://www.w3.org/1999/xlink");
return result;
}
});
当然,这不是优雅的灵魂,但我不确定是否还有其他方法.我希望Jackson在以后的版本中增加对前缀的api支持.
但是我想在您的情况下需要带前缀的默认名称空间,这似乎更加困难,因为Jackson不支持默认名称空间(https://github.com/FasterXML/jackson-dataformat-xml/issues/18),甚至不使用@JacksonXmlRootElement(namespace =“ http://xmlns.uri.com “),您仍然需要使用@JacksonXmlProperty(namespace =” http://xmlns.uri.com“)注释每个属性
标签:xstream,jaxb2,jackson,spring,spring-mvc 来源: https://codeday.me/bug/20191121/2055238.html