Jaxb注释@xmlelement(name =" ElementName")不与xml元素名称绑定

时间:2017-06-14 10:13:05

标签: java xml spring-mvc jaxb unmarshalling

My Spring MVC Web Service代码如下。

模型类

@XmlRootElement(name="wrappedSecretData")
public class VendorData {


        private long lKeyId;



        @XmlElement(name="keyId")
        public long getlKeyId() {
            return lKeyId;
        }


        public void setlKeyId(long lKeyId) {
            this.lKeyId = lKeyId;
        }       
    }

控制器方法

 @RequestMapping(value = "/vendor", method = RequestMethod.POST)
        public String addVendor(@RequestBody VendorData vendorData) {

            /*Checking recieved value*/
            System.out.println(vendorData.getlKeyId());//**Returning 0 value **
            return "Success";
        }

Web服务的Xml请求主体

<wrappedVendorSecretsMetadata>
    <keyId>1</keyId>
</wrappedVendorSecretsMetadata>

我得到&#34; 0&#34; lKeyId中的值(粗体评论)。 我在哪里做错了。 请提供使用@XmlElement(name =&#34; keyId&#34;)注释将xml元素绑定到对象成员的正确方法。

3 个答案:

答案 0 :(得分:0)

我认为你只需要在变量声明上使用@XmlElement。

答案 1 :(得分:0)

试试这个:

@XmlRootElement(name="wrappedVendorSecretsMetadata")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class VendorData {

    private long lKeyId;

    public VendorData(){

    }

    @XmlElement(name="keyId")
    public long getlKeyId() {
        return lKeyId;
    }

    public void setlKeyId(long lKeyId) {
        this.lKeyId = lKeyId;
    }       
}

答案 2 :(得分:-1)

默认情况下,注释不适用于jaxb中的XmlMapper。为此,您必须注册注释模块,就像我在以下代码块中所做的那样:

String xmlData = getMyXmlData();
ObjectMapper objectMapper = new XmlMapper();
objectMapper.registerModule(new JaxbAnnotationModule());        
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MyClass myObj= objectMapper.readValue(xmlData , MyClass.class); 

在这种情况下,您必须覆盖Xml到对象的绑定过程。为此,您可以在控制器中接收HttpRequest,然后使用自己的Java代码将xml数据转换为VendorData。