Java JAX-RS接受图像作为输入

Java JAX-RS接受图像作为输入,java,web-services,rest,jax-rs,Java,Web Services,Rest,Jax Rs,相当一段时间以来,我一直在开发JAX-RSWeb服务以满足我的开发需求。到目前为止,我编写的所有方法都接受java字符串或基本类型作为输入 此类方法的一个示例: @POST @Path("MyMethod") @Produces(MediaType.APPLICATION_JSON) public String MyMethod(@FormParam("username")String username, @FormParam("password")String passowrd)

相当一段时间以来,我一直在开发JAX-RSWeb服务以满足我的开发需求。到目前为止,我编写的所有方法都接受java字符串或基本类型作为输入

此类方法的一个示例:

@POST  
@Path("MyMethod")  
@Produces(MediaType.APPLICATION_JSON)  
public String MyMethod(@FormParam("username")String username, @FormParam("password")String passowrd)
我现在要做的是接受图像作为输入。我读了很多关于这方面的文章。一些人建议接受base64编码作为输入,其他人建议接受实际的InputSteam

然而,我还没有看到关于如何接受InputStream的完整示例。我读到了关于@consumer注释和@Provider的文章,但我还是无法理解。是否有一篇文章、文档或示例以某种方式指导我实现这一目标?i、 e.关于如何实施而不是展示理论的逐步过程

我知道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);
    };
}

我没有尝试上面的代码,但是如果我想要有多个参数呢?一系列字符串、基本类型和InputStream?另外,如果我想支持所有类型的图像,该怎么办?您希望您的HTTP POST请求正文看起来如何?yegor256,我不确定我是否理解您的问题。你的意思是我将如何构造我的请求主体?你将如何将
InputStream
String
参数相结合?给出一个POST请求主体的示例