2014-01-10 101 views
1

我需要知道是否有方法可以根据查询参数设置@Produces值。 例如:如果查询参数值是'JSON',那么我想将方法​​头设置为@Produces(application/json),或者如果它是'XML',那么我想将它设置为@Produces(application/xml)我知道我们可以指定多种媒体类型为 @Produces({“application/json”,“application/xml”}),但它不适用于我,因为它在输出时给我一个错误是JSON。动态设置媒体类型@Produces注释值

非常感谢!

+0

可能的重复:http://stackoverflow.com/questions/10636201/java-annotations-values-provided-in-dynamic-manner – CodeChimp

+0

生成JSON时会出现什么错误?不管怎样,不要使用@ @ Produces',按照@SotiriosDelimanolis(http://stackoverflow.com/a/21053612/290799)的建议将返回类型更改为'Response',并使用'#type()来设置所需的媒体类型...)'。 –

+0

感谢米哈尔的帮助! – sf9251

回答

2

Java语言规范包含了关于注释属性内容的规则。具体而言,it says this

它是一个编译时间错误,如果在 注释类型中声明的方法的返回类型不是下列之一:基本类型, 字符串,类,任何参数调用类,枚举类型 (第8.9节),注释类型或数组类型(第10节),其元素类型 是前述类型之一。

基本上,注释(及其属性的值)是编译时间常量。所以,不,你不能改变注解本身的价值。

你可以做的是follow this并使你的处理程序方法返回一个Response对象与适当的媒体类型。

+0

感谢您的指导。它帮助! – sf9251