我正在编写一个服务来使用传递给我的服务的 json 返回一个 xls 文件。我正在使用 JAX-RS 和 WINk。由于传递给我的服务的 json 过于复杂,无法成为 url 中的 @QueryParam,所以我想使用 @POST 方法而不是 @GET。
问题是:如果我使用@GET,我知道我可以在浏览器中粘贴url来下载服务返回的文件,但是如果我使用@POST,我该如何下载服务返回的文件?
目标是当用户向该服务发布请求时,会弹出一个窗口询问“打开”、“下载”或“取消”。
我正在编写一个服务来使用传递给我的服务的 json 返回一个 xls 文件。我正在使用 JAX-RS 和 WINk。由于传递给我的服务的 json 过于复杂,无法成为 url 中的 @QueryParam,所以我想使用 @POST 方法而不是 @GET。
问题是:如果我使用@GET,我知道我可以在浏览器中粘贴url来下载服务返回的文件,但是如果我使用@POST,我该如何下载服务返回的文件?
目标是当用户向该服务发布请求时,会弹出一个窗口询问“打开”、“下载”或“取消”。
最简单的方法是使用 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 中显示保存对话框的魅力。