dropwizard: создавать как html, так и json из одного класса

Есть ли способ контролировать формат вывода со стороны клиента?

У меня есть класс, который

@Produces(MediaType.TEXT_HTML)

и я хочу, чтобы он создавал json, когда клиент запрашивает.

Я могу дословно скопировать класс, заменив только аннотации @Path и @Produces, но это выглядит пустой тратой времени.

Интересно, может ли клиент добавить что-то вроде &content-type=application/json к URL-адресу, и мой сервер ответит json вместо html?


person sds    schedule 24.07.2012    source источник


Ответы (1)


Вам нужно будет аннотировать ресурсы как предоставляющие как HTML, так и JSON:

@Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON})

Затем просто убедитесь, что у вас есть MessageBodyWriter реализации, зарегистрированные для обработки возвращаемого типа метода. JacksonMessageBodyProvider Dropwizard должен обрабатывать JSON; если вы используете представления Dropwizard, ViewMessageBodyWriter должен справиться с остальными. Джерси выполнит согласование содержания с клиентом, если ваш клиент имеет application/json в заголовке Accept запроса.

person Coda Hale    schedule 24.07.2012
comment
как мне зарегистрировать MessageBodyWriter? Мой возвращаемый тип расширяет View; этого было достаточно для создания html. как мне управлять заголовком Accept из браузера? Благодарность! - person sds; 25.07.2012
comment
Вам действительно не нужно ничего регистрировать. Это должно просто работать. - person Coda Hale; 25.07.2012
comment
Что касается управления заголовком Accept: вы не можете. - person Coda Hale; 25.07.2012