Jus*_*tin 11 cxf jax-rs jackson
我正在尝试在JAX-RS Web服务中返回一个图像.我能够通过返回成功地工作,FileInputStream但我宁愿避免File为每个请求创建一个.
我正在使用Apache CXF和Jackson(所有其他资源方法都生成application/json).
代码如下所示:
@GET
@Produces("image/png")
public Response getQrCode(@QueryParam("qrtext") String qrtext) {
ByteArrayOutputStream out = QRCode.from(qrtext).to(ImageType.PNG).stream();
return Response.ok(out).build();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这产生了可怕的:
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor:376 - 没有为响应类ByteArrayOutputStream找到消息正文编写器.
这是一个类似帖子的链接,但它没有提到我遇到的"无消息体作者"问题.
我很欣赏如何处理这个问题的任何想法.谢谢!
Sta*_*Man 22
只需使用StreamingOutput包装器.由于某种原因,它是未知的,但它提供流媒体输出是伟大的.:-)
我认为你需要在Response.ok(out)中提供一个包含图像的InputStream而不是OutputStream.(您的JAX-RS框架将从InputStream读取字节并将它们放到响应中,它将无法通过OutputStream执行任何操作)
(我知道你是在CXF上,但泽西岛的文档:http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e324并且通过JAX-RS规范,框架必须提供MessageBodyWriter对于InputStream.)
编辑:你显然知道需要输入InputStreams,但是哦......你能控制QRCode类吗?
短期内,您可以做到:
return Response.ok(out.toByteArray()).build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15920 次 |
| 最近记录: |