我正在编写Rest客户端,我正在尝试使用主要用于具有特定名称的下载文件的rest资源,并且文件可能是不同的格式。 我能够检索数据,但它采用分块格式,因此数据无法正确呈现在文件中(它采用编码格式), 如何从休息客户端获取已下载文件的名称。
@GET
@Path("/download/pdf")
@Produces("application/pdf")
public Response downloadPdfFile() {
// set file (and path) to be download
File file = new File("D:/Demo/download/Sample.pdf");
ResponseBuilder responseBuilder = Response.ok((Object) file);
responseBuilder.header("Content-Disposition", "attachment; filename=\"MyJerseyFile.pdf\"");
return responseBuilder.build();
}
我有这个休息资源,我想通过休息客户端消费,并通过消费响应我也应该得到文件名,例如“Sample.pdf”。
当我从浏览器或SOAP UI使用此URL时,我得到了正确的响应我现在想在另一个休息资源中编写rest客户端,所以基本上我使用rest客户端从另一个rest资源调用rest服务。
我已经编写了Java客户端,我正在获取byte []但是当我尝试在我的文件中渲染这个字节时,我在文件和SOAP UI中获得了编码格式数据,它说, 传输编码:分块
URIBuilder builder = new URIBuilder();
builder.setScheme("http").setHost("localhost:8080")
.setPath("/download/pdf");
URI uri = builder.build();
HttpClient client = HttpClientBuilder.create().build();
HttpGet get = new HttpGet(uri);
HttpResponse response = client.execute(get);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer resultTest = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
resultTest.append(line);
}
byte[] byteArr=String.valueOf(resultTest).getBytes();
我使用上面的代码作为rest client