java - JAX-RS 中的@Produces 注解

标签 java annotations jax-rs

我的服务方法生成此 MediaTypes 之一,它可能生成 pdfexcel 文件或其他文件。

@Produces({"application/pdf","application/vnd.ms-excel"...

我的问题

我的服务始终返回带有 application/pdf 的响应类型,即使它生成 excel。为什么?

然后我重新安排了 MediaTypes

@Produces({"application/vnd.ms-excel","application/pdf",...

现在它为所有响应提供 application/vnd.ms-excel 类型,又是为什么?

我正在为客户端使用 com.sun.jersey API 并通过使用

获取类型
clientResponse.getType()

可能我认为我误解了 @Produces 注释的概念。

请澄清。


以下是我的服务方法的代码。

response = Response.ok((Object) file);//file is Object of File
response.header("Content-Disposition","attachment; filename="+filename);
//filename can be a.pdf b.xlsx etc
return response.build();

最佳答案

JAX-RS 方法应该根据请求的 Accept header 的值来确定首选内容类型。如果做不到这一点,它应该默认为第一个指定的。

虽然 JAX-RS spec在这个问题上有些模糊,Jersey documentation对选择机制的描述非常清晰。

关于java - JAX-RS 中的@Produces 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257314/

相关文章:

java - 拆分这个字符串?

python - 在 Python 3.6 中运行时根据 Union 类型检查变量

php - 学说注释尝试自动加载错误注释

maven - ClassNotFoundException : org. glassfish.jersey.media.multipart.FormDataMultiPart

java - @FormDataParam 和@FormParam 有什么区别

java - 为什么我们需要@PUT、@POST @DELETE 注解?我的代码没有它们也能工作

java - 如何处理 Hibernate 和数据库模式中名称的国际化

java - 在android中滚动 ListView 时如何不刷新

java - json 路径 : Filter on child of an array within another array

java - 为什么 java.lang.invoke.LambdaForm$Hidden 注释是运行时注释?