在使用 jackson-databind、jackson-dataformat-xml 和 jackson-datatype-jsr310 的 Spring Boot 2.7.7 应用程序中 我想使用命名空间生成此 XML,更重要的是,前缀 n1 (必须是这个) ):
<?xml version="1.0" encoding="ASCII" ?>
<n1:EventMessage
xmlns:n1="http://we.com/2016/path/Types">
<n1:Header>
<n1:EventID>eventid</n1:EventID>
<n1:EventTime>eventTime</n1:EventTime>
</n1:Header>
</n1:EventMessage>
为此,我有两个 POJO:
@JacksonXmlRootElement(localName = "EventMessage", namespace = "http://we.com/2016/path/Types")
public class EventMessage {
@XmlElement(name = "Header")
private Header header;
}
public class Header {
@XmlElement(name = "EventID")
private String eventId;
@XmlElement(name = "EventTime")
private String eventTime;
并尝试生成:
XmlMapper mapper = new XmlMapper();
mapper.writeValueAsString(eventMessage);
我得到的是
<?xml version="1.0" encoding="ASCII" ?>
<EventMessage
xmlns="http://we.com/2016/path/Types">
<Header>
<EventID>eventid</EventID>
<EventTime>eventTime</EventTime>
</Header>
</EventMessage>
如何添加 n1: 前缀并将 :n1 添加到 xmlns?
我认为您无法按照使用
namespace
属性描述的方式来做到这一点。它需要是自定义元素xmlns:n1
而不是命名空间
这可以通过以下方式实现
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
@JacksonXmlRootElement(localName = "n1:EventMessage")
public class EventMessage {
@JacksonXmlProperty(isAttribute = true, localName = "xmlns:n1")
private String xmlns = "http://we.com/2016/path/Types";
@JacksonXmlProperty(localName = "n1:Header")
private Header header;
public Header getHeader() {
return header;
}
public void setHeader(Header header) {
this.header = header;
}
}