ltf*_*hie 5 spring xstream spring-mvc jaxb2 jackson
Spring 提供了几种通过 HttpMessageConverter 将 POJO 转换为 XML 的方法。但是,我很难找到一个支持带前缀的自定义命名空间。
例如从
public class Student {
String name;
String address;
Integer score;
}
Run Code Online (Sandbox Code Playgroud)
到
<?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>
Run Code Online (Sandbox Code Playgroud)
我很高兴将 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>
Run Code Online (Sandbox Code Playgroud)
我已经以这种方式添加了命名空间 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;
}
});
Run Code Online (Sandbox Code Playgroud)
当然,这不是优雅的灵魂,但我不确定是否还有其他方法。我希望 Jackson 在未来的版本中添加对前缀的 api 支持。
但我想在你的情况下需要带有前缀的默认命名空间,这似乎更困难,因为 Jackson 不支持默认命名空间(https://github.com/FasterXML/jackson-dataformat-xml/issues/18)甚至使用类继承@JacksonXmlRootElement(namespace="http://xmlns.uri.com")仍然需要注释每个属性@JacksonXmlProperty(namespace="http://xmlns.uri.com")
| 归档时间: |
|
| 查看次数: |
8001 次 |
| 最近记录: |