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元素绑定到对象成员的正确方法。
答案 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。