在 jackson POJO 中设置命名空间前缀

问题描述 投票:0回答:2

在使用 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?

java jackson jackson-databind jackson-dataformat-xml
2个回答
0
投票

我认为您无法按照使用

namespace
属性描述的方式来做到这一点。它需要是自定义元素
xmlns:n1
而不是命名空间


0
投票

这可以通过以下方式实现

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.