现在相当一段时间,我一直在开发JAX-RS Web服务为我的发展需求。 所有这一切我已经写到目前为止接受Java字符串或原始类型的输入方法。
这样的方法的一个示例:
@POST
@Path("MyMethod")
@Produces(MediaType.APPLICATION_JSON)
public String MyMethod(@FormParam("username")String username, @FormParam("password")String passowrd)
我试图现在要做的就是接受图像作为输入。 我阅读了有关这个有很多的文章。 一些建议的接受的base64编码作为输入,并且其他人则建议接受一个实际的InputSteam。
不过,我还没有看到如何接受一个InputStream一个完全成熟的例子。 我看了一下@consumer注释和@Provider,但我仍然不能换我的头周围。 有一篇文章,文档或以某种方式引导我走向这样的例子? 即在如何实现,而不是显示理论的循序渐进的过程。
我知道base64编码工作,但出于好奇,我想知道的另一种方法是如何工作的,以及...在此先感谢。
这应该工作:
import org.apache.commons.io.IOUtils;
@POST
@Path("MyMethod")
@Consumes("*/*") // to accept all input types
public String MyMethod(InputStream stream) {
byte[] image = IOUtils.toByteArray(stream);
return "done";
}
也许不是首选,但一个简单的方法来组合使用InputStream
与一个或多个路径参数:
@POST
@Path("page/{page}")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
@Produces("image/jpeg")
public StreamingOutput generatePage(final InputStream inputStream, @Context UriInfo uriInfo) {
final int page = Integer.parseInt(uriInfo.getPathParameters().getFirst("page"));
return (outputStream) -> {
service.generatePage(page, inputStream, outputStream);
};
}