当前位置: 首页 > 知识库问答 >
问题:

从spring MVC控制器返回xml文件

常坚
2023-03-14
@RequestMapping(value = "/files", method = RequestMethod.GET)
@ResponseBody public FileSystemResource getFile() {
     return new FileSystemResource(new File("try.txt")); 
}

我得到这个错误消息

无法写入JSON:
未找到用于java.io.FileDescriptor类的序列化程序,也未发现用于创建BeanSerializer的属性
(为了避免异常,禁用SerializationFeature.fail_on_empty_beans))
(通过引用链:
org.springframework.core.io.filesystemResource[\“outputStream\”]->java.io.FileOutputStream[\“fd\”]);
嵌套异常是禁用serializationfeature.fail_on_empty_beans))
(通过引用链:org.springframework.core.io.filesystemresource[\“outputstream\”]->java.io.fileoutputstream[\“fd\”])

有人有办法解决吗?

并且,我应该如何从客户机(JavaScript、jQuery)发送?

共有1个答案

桂德义
2023-03-14

编辑2:首先--请参阅底部的编辑1--这不是正确的方法。但是,如果不能使序列化程序工作,可以使用此解决方案,将XML文件读入字符串,并让用户保存它:

@RequestMapping(value = "/files", method = RequestMethod.GET)
public void saveTxtFile(HttpServletResponse response) throws IOException {

    String yourXmlFileInAString;
    response.setContentType("application/xml");
    response.setHeader("Content-Disposition", "attachment;filename=thisIsTheFileName.xml");

    BufferedReader br = new BufferedReader(new FileReader(new File(YourFile.xml)));
    String line;
    StringBuilder sb = new StringBuilder();

    while((line=br.readLine())!= null){
        sb.append(line);
    }

    yourXmlFileInAString  = sb.toString();

    ServletOutputStream outStream = response.getOutputStream();
    outStream.println(yourXmlFileInAString);
    outStream.flush();
    outStream.close();
}

应该能胜任工作。但是请记住,浏览器会缓存URL内容--所以每个文件使用唯一的URL可能是个好主意。

编辑:

response.setContentType("text/plain");
response.setContentType("application/xml");
@RequestMapping(value = "/files", method = RequestMethod.GET)
@ResponseBody public FileSystemResource getFile(HttpServletResponse response) {
    response.setContentType("application/xml");
    return new FileSystemResource(new File("try.xml")); //Or path to your file 
}
 类似资料:
  • 我正在使用Spring形式。我只需要得到Staemap作为响应,但我得到的是整个jsp页面作为响应。

  • 如果可以从Spring返回,我很好奇 这样做可以吗?我试过了,Spring返回的不是流的值。 我应该继续返回

  • 本文向大家介绍详解利用SpringMVC拦截器控制Controller返回值,包括了详解利用SpringMVC拦截器控制Controller返回值的使用技巧和注意事项,需要的朋友参考一下 背景:需求是在Controller中方法没有实现时,返回模拟结果。主要用于项目初期前台跟后台的交互,Web项目就是在前台发出请求然后后台响应并返回结果。本示例利用拦截器和注解实现跳过执行方法直接返回定义结构的功能

  • 你好,我是拉威尔的新手,也许这对你们来说太傻了。在laravel 8中,路由web。php我创建了一条如下的路线: 我想问的是,我们也可以从回调视图返回控制器吗?所以在路由 /editprofile中,第二个参数不是'App\Http\Controller\SiteController@edit_profile',而是一个回调函数,如路由'/home'。 但是它返回错误哈哈。假设我不想用__con

  • 我无法完成的任务是将参数从一个场景传递到另一个场景并返回。 或者换句话说:主控制器加载子控制器的fxml,将对象传递给子控制器,切换场景。不得有两扇开着的窗户。工作完成后,副控制器将场景切换回主控制器,并将一些对象传递回主控制器。这就是我失败的地方。 这个问题和这个问题很相似但仍然没有答案。传递参数JavaFX FXML在注释中也提到了: 有没有人知道如何在没有外部库的情况下实现这一点?

  • 我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦