java - 使用 Retrofit 2.0 和 Spring Server 下载文件

标签 java android spring retrofit2

我有一个使用 Retrofit 1.9 和 Spring Server 的 Android 应用程序。 Android应用程序可以完美下载文件。我正在尝试迁移到 Retrofit 2.0。

改造1.9代码

Controller 服务器:

@RequestMapping(value = GET_MAP , method = RequestMethod.GET)
public void getMap(@PathVariable("filename")String filename
            ,HttpServletResponse response) throws IOException {
        Files.copy(filename + ".zip", response.getOutputStream());
}

Android 接口(interface) API

@Streaming
@GET(GET_MAP)
public Response getMap(@Path("filename") long id);
<小时/>

因此,在谷歌搜索迁移后,为了下载 Retrofit 2.0 中的文件我必须使用Call<ResponseBody>在我的 Android 接口(interface) API 中。我尝试过这样的事情:

选项 1 Controller 服务器代码

@RequestMapping(value = GET_MAP , method = RequestMethod.GET)
public void getMap(@PathVariable("filename")String filename
            ,HttpServletResponse response) throws IOException {
        Files.copy(filename + ".zip", response.getOutputStream());
}

选项 2 Controller 服务器代码

@RequestMapping(value = GET_MAP , method = RequestMethod.GET)
public @ResponseBody HttpServletResponse getMap(@PathVariable("filename")String filename
            ,HttpServletResponse response) throws IOException {
        Files.copy(filename + ".zip", response.getOutputStream());
return response;
}

Android 接口(interface) API

@Streaming
@GET(GET_MAP)
public Call<ResponseBody> getMap(@Path("filename") long id);

但是使用这两个选项,响应长度给我-1:

response.body().contentLength() = -1

我如何迁移 Controller 方法?

最佳答案

在服务器上尝试了几种响应配置后,这对我有用:

  1. 获取文件作为新文件

  2. 使用org.springframework.core.io.FileSystemResource.FileSystemResource 库将文件作为 ResponseBody 传递。

    @RequestMapping(value = GET_MAP , method = RequestMethod.GET)
    public @ResponseBody Resource getMap(@PathVariable("filename")String filename ,HttpServletResponse response) throws IOException {
        File file = new File(filename + ".zip");
        return new FileSystemResource(file);
    }
    

关于java - 使用 Retrofit 2.0 和 Spring Server 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049827/

相关文章:

java - 如何将 ActionEvent 添加到 JButton,以便当我单击它时它将触发该事件?

java - 日期的创建周期在列表中是连续的(它们之间相差一天)

java - 使用静态方法作为 JavaFX 更改监听器

java - 对于 Android,我应该在我的游戏中更频繁地使用 float 数据类型,还是在绘图时转换为 float ?

Android - 如何制作非调试 .apk 文件?

java - 已经有关联的托管连接错误

java - Apache FOP 可以在 Android 上运行吗?

android - 如何从Android中的音频检测语音成分?

java - Spring:xsi:schemaLocation无法从spring.schemas读取配置

java - 使用 ActimeMQ 和 Spring Consumer 通过 mqtt 发送和接收图像文件