首页 文章

如果xml元素命名约定与POJO属性命名约定不同,则发送到Spring Boot REST API的XML元素不会映射到POJO

提问于
浏览
0

当我向REST控制器发送XML有效负载时,未按预期映射 . 我的实现是通过使用Spring Boot完成的 . 我使用JaxB基于XSD文件生成了POJO . 仅当XML元素遵循POJO中遵循的相同命名约定时,才会映射XML元素 .

<Declaration xmlns:p="My_Common_Types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MY_Schema.xsd">
    <ID>ID</ID>
    <Regime>REG</Regime>
</Declaration>

使用JAXB生成的代码如下,

@XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "id",
        "regime"
    })
    @XmlRootElement(name = "Declaration")
    public class Declaration {

        @XmlElement(name = "ID")
        protected String id;

        @XmlElement(name = "Regime")
        protected String regime;

        public String getID() {
            return id;
        }

        public void setID(String value) {
            this.id = value;
        }

        public String getRegime() {
            return regime;
        }

        public void setRegime(String value) {
            this.regime = value;
        }
    }

休息控制器如下,

@RestController
    public class XMLConsumerController {

        @PostMapping("/xmlPayload")
        public void decodeXML(@RequestBody Declaration xmlPayLoad) {

        }
    }

pom.xml依赖关系如下,

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

</dependencies>

真的很感激,如果有人可以帮我解决这个问题 .

1 回答

  • 1

    删除 jackson-dataformat-xml 依赖项并将起作用 .

    更新:

    使用粘贴的xml,通过Postman . 正文以text / xml格式发送 . 我的依赖关系如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    

    它工作正常

    更新2:

    从错误响应中的消息,它看起来它期望声明的命名空间,即使我没有在你发布的类中看到它 . 可能在package-info.java中指定了一个名称空间 .

    好的尝试使用此正文请求:

    <p:Declaration xmlns:p="My_Common_Types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MY_Schema.xsd">
        <ID>ID</ID>
        <Regime>REG</Regime>
    </p:Declaration>
    

    它可能仍然失败,但绝对不会抱怨宣言 . 如果它涉及ID或Regime,则在有效负载中添加'p'前缀并重复 .

相关问题