2014-01-10 4 views
1

Мне нужно знать, есть ли способ, с помощью которого я могу установить значение @Produces из параметра запроса. Например: если значением параметра запроса является «JSON», тогда я хочу установить заголовок метода как @Produces (application/json), или если это «XML», тогда я хочу установить его как @Produces (application/xml)Динамически настраиваемый тип мультимедиа @ Задает значение аннотации

Я знаю, что мы можем указать несколько типов носителей как @Produces ({"application/json", "application/xml"}), но он не работает для меня, поскольку он дает мне ошибку, когда вывод это JSON.

Большое спасибо!

+0

Возможный повтор: http://stackoverflow.com/questions/10636201/java-annotations-values-provided-in-dynamic-manner – CodeChimp

+0

Какая ошибка вы получаете при производстве JSON? В любом случае, не используйте '@ Produces', измените тип возврата на« Response », как описано @SotiriosDelimanolis в (http://stackoverflow.com/a/21053612/290799), и установите желаемый тип носителя, используя' #type (...) '. –

+0

Спасибо Michal за помощь! – sf9251

ответ

2

Спецификация языка Java имеет правила для того, что может входить в атрибуты аннотации. В частности, it says this

Это ошибка во время компиляции, если тип возврата метода, объявленного в типа аннотаций не является одним из следующих: примитивного типа, Строки, класс, любой параметризованный вызов Класс, тип перечисления (§8.9), тип аннотации или тип массива (§10), тип элемента которого является одним из предыдущих типов.

В основном, аннотации (и их значения атрибутов) предназначены для того, чтобы составлять константы времени компиляции. Итак, нет, вы не можете изменить значение самой аннотации.

Что вы можете сделать, это follow this и сделать метод вашего обработчика возвратом объекта Response с соответствующим типом носителя.

+0

Благодарим вас за руководство. Это помогло! – sf9251

Смежные вопросы