antonVasilev
antonVasilev

Reputation: 11

Can't get xmlelements' values when it uppercase

Can't get the xml elements "CustNo" and "Name" value in the POST API using Spring Boot (It happens with the elements' names in uppercase)

The Custromer class:

    @XmlAccessorType(XmlAccessType.PROPERTY)
    @XmlType(name = "", propOrder = {
            "custNo",
            "name"
    })
    @XmlRootElement(name = "customer")
    public class Customer {
            
        @XmlElement(name = "CustNo")
        private int custNo;
        
        @XmlElement(name = "Name")
        private String name;
    
        @XmlElement(name = "CustNo")
        public int getCustNo() {
            return custNo;
        }
    
        public void setCustNo(int custNo) {
            this.custNo = custNo;
        }
    
        @XmlElement(name = "Name")
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }

the XML request Body:

    <customer>
        <CustNo>100</CustNo>
        <Name>Alex</Name>
    </customer>

Controller:

    @PostMapping(path = "/save-cust-info", consumes = MediaType.APPLICATION_XML_VALUE)
    public String customerInformation(@RequestBody Customer cust) {
        return "Customer information saved successfully ::." + cust.getCustNo() + " " + cust.getName();
    }

POM dependencies:

    <properties>
        <java.version>11</java.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/>
    </parent>

    <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>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>
</project>

The result is: "Customer information saved successfully ::.0 null United States"

But value CustNo is 0 and Name is null. What did i wrong?

Thanks for any help in advance.

Upvotes: 0

Views: 967

Answers (1)

antonVasilev
antonVasilev

Reputation: 11

Thank you, Cezary Butler, spring ignored annotations the solution - is to replace @XmlElement to @JacksonXmlProperty This is how i solved it:

@JacksonXmlRootElement(localName = "customer")




public class Customer {

    private String country;

    @JacksonXmlProperty(localName="CustNo")
    private int custNo;

    @JacksonXmlProperty(localName="Name")
    private String name;

    public Customer() {

    }


    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public int getCustNo() {
        return custNo;
    }

    public void setCustNo(int custNo) {
        this.custNo = custNo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

and pom.xml:

  <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>LATEST</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-jaxb-annotations</artifactId>
        <version>LATEST</version>
    </dependency>

Upvotes: 1

Related Questions