【问题标题】:JAX-RS Accept Images as inputJAX-RS 接受图像作为输入
【发布时间】:2013-02-13 16:34:48
【问题描述】:

很长一段时间以来,我一直在开发 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 编码可以工作,但出于好奇,我想知道其他方法是如何工作的...提前致谢。

【问题讨论】:

    标签: java web-services rest jax-rs


    【解决方案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";
    }
    

    【讨论】:

    • 我没有尝试上面的代码,但是如果我想要多个参数怎么办?一系列字符串和原始类型和一个 InputStream?另外,如果我想支持所有类型的图像怎么办?
    • 您希望您的 HTTP POST 请求正文是什么样的?
    • yegor256,我不确定我是否理解你的问题。你的意思是我将如何构建我的请求正文?
    • 你将如何将InputStreamString 参数结合起来?举一个 POST 请求正文的例子
    【解决方案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);
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 2012-06-29
      • 2019-09-16
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多