我有一个使用Retrofit 1.9
的Android应用程序和一个Spring Server。 Android应用程序可以完美下载文件。我正在尝试迁移到Retrofit 2.0
。
改造1.9代码
控制器服务器:
@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界面API
@Streaming
@GET(GET_MAP)
public Response getMap(@Path("filename") long id);
因此,在谷歌搜索迁移以便在Retrofit 2.0
中下载文件之后,我必须在我的Android界面Api中使用Call<ResponseBody>
。我试过这样的事情:
选项1控制器服务器代码
@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控制器服务器代码
@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界面API
@Streaming
@GET(GET_MAP)
public Call<ResponseBody> getMap(@Path("filename") long id);
但是使用这两个选项,响应长度给我-1:
response.body().contentLength() = -1
我如何迁移Controller方法?
答案 0 :(得分:1)
在服务器上尝试了几种响应配置后,这对我有用:
1 - 将文件设为new File
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);
}