如何将xml字符串转换为xml文件下载

时间:2012-02-07 08:40:13

标签: xml spring spring-mvc

我的控制器中有一个方法,如下所示:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody String getNameAsXML(HttpServletRequest httpRequest, @RequestParam("name") String name)
{
    ... some logic goes here to get the data from the db 
     by name and convert it to valid xml string
    ...
        return xmlString;
}

xmlString是我想要返回的xml的String表示。

当我运行这个方法时,我可以在浏览器中看到xml但是我希望给用户一个下载弹出窗口,允许他将其下载为xml文件而不是在浏览器中显示。

我考虑过返回MultipartFile而不是String,但不太确定如何操作。

3 个答案:

答案 0 :(得分:3)

这可以通过将响应标题中的“Content-Disposition”设置为“attachment =”来实现。将响应类型设置为正确的MIME类型(“text / xml”)是一种很好的做法。但是,这可能已经自动完成。

答案 1 :(得分:0)

你可以在java中用字符串创建xml文件,如下所示:

 public static void main(String[] args) {  
        String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"></soap:Envelope>";  

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  

        DocumentBuilder builder;  
        try  
        {  
            builder = factory.newDocumentBuilder();  

            // Use String reader  
            Document document = builder.parse( new InputSource(  
                    new StringReader( xmlString ) ) );  

            TransformerFactory tranFactory = TransformerFactory.newInstance();  
            Transformer aTransformer = tranFactory.newTransformer();  
            Source src = new DOMSource( document );  
            Result dest = new StreamResult( new File( "xmlFileName.xml" ) );  
            aTransformer.transform( src, dest );  
        } catch (Exception e)  
        {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  

然后提供该文件的链接,以便用户可以下载。

参考http://www.coderanch.com/t/512978/java/java/convert-string-xml-file-java

也请参考http://www.java.happycodings.com/XML/code17.html

答案 2 :(得分:0)

我最终将response.setHeader("Content-Disposition", "attachment; filename=test.xml");添加到上面的Controller方法中,并且工作正常。

我对这个解决方案并不是百分之百满意,因为我正在寻找更多可配置的Spring而不是入侵响应对象,所以如果有人有更好的想法那么请分享。

感谢您上面的回复,但我认为他们和我的一样糟糕:)