【问题标题】:Pass an XML file from spring MVC Controller从 Spring MVC 控制器传递一个 XML 文件
【发布时间】:2015-10-12 00:54:34
【问题描述】:

我是 Spring 新手,我需要将一个 XML 文件从 spring 控制器传递给我的 JavaScript 文件。谁能详细说明我应该怎么做? 我已经在我的控制器上尝试过了,但是响应正文没有内容。

@Api(value = "XML", description = "")
@RequestMapping("/XML/v1/setting")
public class XMLController{

    @RequestMapping(method = RequestMethod.GET,
         value = "/createFOO",
         produces = "application/xml")
    @ResponseStatus(HttpStatus.CREATED)
    @ResponseBody
    public Document createFOO(){
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       DocumentBuilder builder;
       Document doc1 = null;
       try {
          builder = factory.newDocumentBuilder();
           doc1 = builder.parse(new FileInputStream("largeXmlGraph.xml"));
       } catch (ParserConfigurationException | SAXException | IOException e) {
                e.printStackTrace();
       }
       return doc1;
    }
}

【问题讨论】:

  • 你为什么需要一个建设者。它只是一个和其他文件一样的文件。只需使用响应的OutputStream 将其流式传输到客户端即可。
  • 你能举个例子吗?

标签: java xml spring spring-mvc


【解决方案1】:

你正在让它变得复杂。

@RequestMapping(method = RequestMethod.GET,value = "/createFOO",produces = "application/xml")
public void createFOO(OutputStream out){
    try (InputStream is = new FileInputStream("largeXmlGraph.xml")) {
        StreamUtils.copy(is, out);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

类似的东西应该可以工作,您可能想要添加更好的异常处理(例如向客户端发送错误)。

【讨论】:

  • StringUtils.copy() 这很方便。 :)
  • 但是,:(,我应该如何将 OutputStream 发送到函数?
  • 我强烈建议阅读如何使用@RequestMapping 以及支持哪些方法参数。 docs.spring.io/spring/docs/current/spring-framework-reference/…
  • 据我了解,这个参数不用我发吧?
  • 文件为空,或文件位于其他位置。可以是任何东西,但这基本上是如何将任何文件发送回客户端。除了OutputStream,您还可以使用HttpServletResponse 并将适当的内容类型标头设置为application/xml
【解决方案2】:

为了使用application/xml,添加这个依赖

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

Multiple scenarios @RequestMapping produces JSON/XML together with Accept or ResponseEntity的参考链接

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 2018-05-25
    • 1970-01-01
    • 2016-07-29
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多