Jersey REST服务返回jpeg和png图像

3
我正在尝试创建一个单一的Jersey REST服务,可以返回jpeg或png类型的图像。原因是该服务只有对二进制数据访问权限,并且无法确定其是否为jpeg或png图像。如果我使用以下声明,则浏览器会显示二进制数据。
@Produces("image/*")

然而,如果我对JPEG图像使用以下内容,则会显示正确的图像。
@Produces("image/jpeg").

我想知道如何使用单个声明,让浏览器识别正确的图像类型(jpeg或png)以进行呈现?

2个回答

6

这个声明对客户端如何识别媒体类型有何帮助? - forty-two
容器确定并生成有效的“Content-Type”HTTP头+“Content-Length”。这对客户端来说已经足够的信息。 - ioseb
容器无法自己决定!如果你只有一个 @Produces 注解,你可以让容器设置内容类型,否则你必须自己设置。请阅读你在答案中提供的链接的第二段。 - forty-two
为什么它总是自动地对我起作用?当从方法返回图像时,容器能够从二进制数据结构中确定有效的内容类型。 - ioseb
我的猜测是浏览器更加智能,而不是容器。 - forty-two
显示剩余4条评论

4
如果服务不知道类型,它不能比image/*更具体。但是,您可以检查数据的前几个字节detect类型,并相应地添加Content-Type头。
请注意,拥有多个@Produces注释的目的是进行内容协商,其中用户代理表达所需的资源表示形式,服务器以数据的适当变体回答,例如JPEG或PNG。

如果我能够识别内容类型,我该如何设置/添加Content-Type头? - user1965449
3
你可以在 ResponseBuilder 上使用 type() 方法。 - forty-two
谢谢!我会尝试的。 - user1965449
@forty-two 我认为这是最好的方法,甚至不需要在这种情况下指定“Produces”。 - Alkanshel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接