Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jaxb注释@xmlelement(name=";ElementName";)未与xml元素名称绑定_Java_Xml_Spring Mvc_Jaxb_Unmarshalling - Fatal编程技术网

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

Java Jaxb注释@xmlelement(name=";ElementName";)未与xml元素名称绑定,java,xml,spring-mvc,jaxb,unmarshalling,Java,Xml,Spring Mvc,Jaxb,Unmarshalling,我的SpringMVCWeb服务代码如下 模范班 @XmlRootElement(name="wrappedSecretData") public class VendorData { private long lKeyId; @XmlElement(name="keyId") public long getlKeyId() { return lKeyId; } public v

我的SpringMVCWeb服务代码如下

模范班

@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>

1.
我得到lKeyId中的“0”值(粗体注释)。 我哪里做错了。
请提供使用@xmlement(name=“keyId”)注释将xml元素绑定到对象成员的正确方法。

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

尝试以下操作:

@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;
    }       
}

默认情况下,注释不适用于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。

我在变量声明上使用了@XmlElement,但仍然不起作用。我尝试了相同的解决方案,但仍然没有将keyId元素名称从xml提取到lKeyId类成员名称。正在lKeyId中获取0值。请帮助…尝试将
long
更改为
long
将示例XML与
VendorData
类反组对我来说很好(包括
lKeyId=1
)。所以,问题可能出在您没有显示的Java代码部分。我已经添加了我的web服务的完整代码。请帮助我哪里做错了。我在解组它时遇到了问题。如何解组它?
wrappedSecretData
!=
wrappedvendosecretsmetadata
Spring MVC以何种方式将XML数据解组到
@RequestBody
注释参数中?SpringMVC为您做这件事的全部意义在于,您不必亲自处理
ObjectMapper
之类的事情。为什么您认为它使用的是
ObjectMapper
,而不是JAXB本身?