消耗下载文件的Rest资源

时间:2017-08-09 03:23:28

标签: java rest rest-client

我正在编写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

0 个答案:

没有答案