2017-06-14 49 views
0

我的Spring MVC Web Service代码如下。如何使用spring mvc从Jaxb解除Http Post Rest Web服务中的xml?

模型类

@XmlRootElement(name="secretData") 
public class VData { 


     private long lKId; 



     @XmlElement(name="kId") 
     public long getlKId() { 
      return lKId; 
     } 


     public void setlKId(long lKId) { 
      this.lKId = lKId; 
     }  
    } 

控制器方法

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

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

XML请求体为Web服务

<secretData> 
    <kId>1</kId> 
</secretData> 

我得到的lKId “0” 值。我在哪里做错了。请提供使用@XmlElement(name =“kId”)注释将xml元素绑定到对象成员的正确方法。

回答

0

在你的@RequestMapping里面加上consumes = MediaType.APPLICATION_XML_VALUE告诉控制器这个方法只会消耗xml。

@RequestMapping(value = "/vendor", method = RequestMethod.POST, consumes = MediaType.APPLICATION_XML_VALUE) 
    public String addVendor(@RequestBody VData vData) { 
     /*Checking recieved value*/ 
     System.out.println(vData.getlKId());//**Returning 0 value ** 
     return "Success"; 
    } 

而当你发布通过HTTP设置页眉XML,Content-type:application/xml

+0

仍然无法正常工作。我认为unmarshaling必须完成。我不知道该怎么做。 –

+0

你得到的错误是什么?你需要在你的classpath中有Jackson数据绑定jar – mhshimul

0

为Spring Web MVC框架使OXM(对象到XML映射),Spring需要一个HttpMessageConverter它可以读取/到XML /写。在Spring中有几种实现可以使用Jackson,XStream,JAXB,...

当Spring在类路径中检测到其中一个库时,Spring会自动添加一个HttpMessageConverter。你在类路径上有JAXB库吗?

您也可以手动将Jaxb2RootElementHttpMessageConverter注册为bean。通过JavaConfig这看起来像:

@Bean 
public HttpMessageConverter oxmHttpMessageConverter() { 
return new Jaxb2RootElementHttpMessageConverter(); 
}