【发布时间】:2017-02-22 08:38:55
【问题描述】:
我是 JAX-RS 的新手,遇到了很多问题(这让我很奇怪地想念 SOAP)。这是我的代码的 sn-p。 getMergedPDFReport 方法应该获取一个文件并在一些处理后返回一个文件。之后我会担心客户
@GET
@Produces("application/pdf")
@Path("merge-service")
public Response getMergedPDFReport(@QueryParam(ApiParameters.WORD_DOCUMENT) File wordDocument,
@QueryParam(ApiParameters.MERGE_FIELDS)Object[] fieldNames,
@QueryParam(ApiParameters.MERGE_VALUES) Object [] fieldValues) {
ResponseBuilder builder =null;
try {
File product = DocumentUtil.generatePDF(wordDocument, fieldNames, fieldValues);
builder = Response.ok(product);
builder.header("Content-Disposition", "attachment; filename=\\\"report.pdf\\\"");
} catch (Exception e) {
e.printStackTrace();
}
return builder.build();
}
我在服务器日志上收到一条警告,上面写着“没有为公共 javax.ws.rs.core.Response 类型的参数找到注入源”。我似乎不知道为什么。 2. 我使用@QueryParam 注释对吗?我应该将它用于文件类型和数组吗?我在网上看到很多关于@BeanParam、@MatrixParam 和@QueryParam 的辩论。由于我不知道前两个做什么,我决定保持简单。
任何帮助将不胜感激。
【问题讨论】:
-
我不确定您收到的警告是否实际上与您提供的代码有关,因为您在该方法中没有
Response类型的参数。您的一般设计有几个缺陷 IMO:使用 HTTP POST 而不是 GET 来上传文件。 GET 是一种安全且幂等的操作,因此不得更改资源状态。调用的 URI 通常受框架的长度限制。如果您将编码文件作为查询参数传递,则 URI 的长度可能会变得相当大,从而增加被拒绝的可能性。
标签: java web-services jax-rs