JAX-RS接受图像作为输入(JAX-RS Accept Images as input)

2019-07-19 19:56发布

现在相当一段时间,我一直在开发JAX-RS Web服务为我的发展需求。 所有这一切我已经写到目前为止接受Java字符串或原始类型的输入方法。

这样的方法的一个示例:

@POST  
@Path("MyMethod")  
@Produces(MediaType.APPLICATION_JSON)  
public String MyMethod(@FormParam("username")String username, @FormParam("password")String passowrd)

我试图现在要做的就是接受图像作为输入。 我阅读了有关这个有很多的文章。 一些建议的接受的base64编码作为输入,并且其他人则建议接受一个实际的InputSteam。

不过,我还没有看到如何接受一个I​​nputStream一个完全成熟的例子。 我看了一下@consumer注释和@Provider,但我仍然不能换我的头周围。 有一篇文章,文档或以某种方式引导我走向这样的例子? 即在如何实现,而不是显示理论的循序渐进的过程。

我知道base64编码工作,但出于好奇,我想知道的另一种方法是如何工作的,以及...在此先感谢。

Answer 1:

这应该工作:

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";
}


Answer 2:

也许不是首选,但一个简单的方法来组合使用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);
    };
}


文章来源: JAX-RS Accept Images as input