如何使用post方法代替实现restful下载服务

时间:2013-03-26 00:57:55

标签: java rest jax-rs apache-wink

我正在编写一个服务,通过使用传递给我的服务的json返回一个xls文件。 我正在使用JAX-RS和WINK。 由于传递给我的服务的json太复杂而不能成为url中的@QueryParam,所以我想使用@POST方法而不是@GET。

问题是: 如果我使用@GET,我知道我可以在浏览器中粘贴url来下载服务返回的文件,但是如果我使用@POST,我该如何下载该服务返回的文件?

目标是当用户将请求发布到此服务时,会弹出一个窗口,询问“打开”,“下载”或“取消”。

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用HTML form

<form action="rest/report/users" method="post">
ID: <input type="text" name="id"><br>
<input type="submit">
</form>

@Path("/report")
public class ReportResource {

    @Path("users")
    @POST
    @Produces(MediaTypeUtils.MS_EXCEL)
    public Response getUsers(@FormParam("id") String id ) {

        // Build the report and get the instance of java.io.File

        ResponseBuilder response = Response.ok(file);
        response.header("Content-Disposition","attachment; filename=report.xls");
        return response.build();
    }
}

像魅力一样显示Chrome和IE中的保存对话框。