10

很长一段时间以来,我一直在开发 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编码可以工作,但出于好奇,我想知道另一种方法是如何工作的……在此先感谢。

4

2 回答 2

8

这应该有效:

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";
}
于 2013-02-13T18:32:39.367 回答
0

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);
    };
}
于 2018-11-28T13:01:34.127 回答