我的控制器中有一个方法,如下所示:
@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,但不太确定如何操作。
答案 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
答案 2 :(得分:0)
我最终将response.setHeader("Content-Disposition", "attachment; filename=test.xml");
添加到上面的Controller方法中,并且工作正常。
我对这个解决方案并不是百分之百满意,因为我正在寻找更多可配置的Spring而不是入侵响应对象,所以如果有人有更好的想法那么请分享。
感谢您上面的回复,但我认为他们和我的一样糟糕:)