2013-07-15 79 views
0

我正在發送一個發送JSON的POST請求。 Controller拾取JSON,處理JSON,並且我希望控制器以XML格式返回一些數據。如何使用Spring MVC從POST rquest返回XML響應?

我怎麼用POST請求做到這一點?

@RequestMapping(value = Controller.RESOURCE_PATH + ".xml", headers = "Accept=application/json", produces = "*/*") 
public String exportXml(@RequestBody String requestJson) throws IOException 
{ 
    JSONObject json = JSONObject.fromObject(requestJson); 
    Option option = new Option(); 
    option.processJson(json); 

    return ""; 
} 

回答

1

有很多方法可以做到這一點。一種是使用MarshallingView和XStreamMarshaller

以下罈子首先添加到您的類路徑(Maven依賴):

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-oxm</artifactId> 
    <version>${org.springframework-version}</version> 
</dependency> 
<dependency> 
    <groupId>com.thoughtworks.xstream</groupId> 
    <artifactId>xstream</artifactId> 
    <version>1.4.4</version> 
</dependency> 

然後在你的Spring XML配置

<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"/> 

配置編組器假設你有以下你想要統帥的bean(即:顯示爲XML)

public class MyMessage { 
    private String message; 

    // getters & setters 
} 

在你的控制器類注射org.springframework.oxm.Marshaller,有你的處理方法返回一個像這樣的MarshallingView:

@Controller 
public class MyController { 

    @Autowired private Marshaller marshaller; 

    @RequestMapping("/helloxml") 
    public MarshallingView helloxml(Model model) { 
    MyMessage msg = new MyMessage(); 
    msg.setMessage("hello world"); 
    model.addAttribute("msg", msg); 

    MarshallingView marshallingView = new MarshallingView(marshaller); 
    marshallingView.setModelKey("msg"); // set what model attribute to display as xml 

    return marshallingView; 
    } 
} 

上面的設置會給你這樣的XML當請求/helloxml

<com.gerrydevstory.xmlview.MyMessage> 
    <message>hello world</message> 
</com.gerrydevstory.xmlview.MyMessage> 

當然,如果您處理許多XML編組,那麼這不是一個很好的設置。在這種情況下,您應該利用視圖解析器配置。

而且XML元素的名稱可得別名縮短。查看XStream文檔

最後,請記住,XStream只是Spring支持的許多編碼器之一,也可以考慮JAXB,Castor,Jibx等。