Java Jaxb注释@xmlelement(name=";ElementName";)未与xml元素名称绑定
我的SpringMVCWeb服务代码如下 模范班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
@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本身?