我正在尝试拥有一个 Jersey REST 服务,它可以返回 jpeg 类型或 png 类型的图像,原因是该服务只能访问并返回二进制数据,并且无法判断它是 jpeg 图像还是.png 图像。
如果我使用以下声明,浏览器将显示二进制数据。
@Produces("image/*")
但是,如果我将以下内容用于 jpeg 图像,则会显示正确的图像。
@Produces("image/jpeg").
我想知道如何使用单个声明使浏览器识别要呈现的正确类型的图像(jpeg 或 png)?
根据 JAX-RS 规范,允许列出多种媒体类型:
@Produces({"image/png", "image/jpeg", "image/gif"})
见:https ://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/Produces.html
更新: 有关更多详细信息,请参见 @forty-two 的答案。
如果服务不知道类型,则它不能比image/*. 但是,您可以检查数据的前几个字节以检测类型并相应地添加Content-Type标头。
请注意,拥有多个 @Produces 注释的目的是用于内容协商,其中用户代理表达想要的资源表示,而服务器则使用适当的数据变体(例如 JPEG或PNG)来回答。