我运行一个Web服务,将文件从一种文件格式转换为另一种文件格式。转换逻辑已经运行但现在,我想通过Jersey查询这个逻辑。每当通过Jersey的文件上传在教程/问题中解决时,人们都会描述如何使用多部分表单数据来完成此操作。但是,我只想发送并返回单个文件,并跳过发送多个部分的开销。 (web服务由我控制的另一台机器触发,因此不涉及HTML表单。)
我的问题是如何实现以下目标:
@POST
@Path("{sessionId"}
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@PathParam("sessionId") String sessionId,
@WhatToPutHere InputStream uploadedFileStream) {
return BusinessLogic.convert(uploadedFile); // returns StreamingOutput - works!
}
如何掌握uploadedFileStream
(应该是一些注释,我猜这当然不是@WhatToPutHere
)。我想出了如何通过StreamingOutput
直接返回文件。
感谢您的帮助!
答案 0 :(得分:2)
您不必在函数的第二个参数中放置任何内容;只是留下它没有注释。 您唯一需要注意的是“命名”资源:
资源应该有一个像:someSite / someRESTEndPoint / myResourceId这样的函数,所以函数应该是:
@POST
@Path("{myResourceId}")
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@PathParam("myResourceId") String myResourceId,
InputStream uploadedFileStream) {
return BusinessLogic.convert(uploadedFileStream);
}
如果你想使用某种SessionID,我更喜欢使用Header Param ...类似于:
@POST
@Path("{myResourceId}")
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@HeaderParam("sessionId") String sessionId,
@PathParam("myResourceId") String myResourceId,
InputStream uploadedFileStream) {
return BusinessLogic.convert(uploadedFileStream);
}