Spring MVC - принудительно заставляет контроллер создавать MappingJacksonJsonView (s) - PullRequest
8 голосов
/ 21 марта 2011

Здесь у нас есть базовое веб-приложение, использующее JSP, которое должно предоставить несколько URL-адресов службы REST на основе JSON.

Все эти URL будут находиться под /services и будут генерироваться как MyRestServicesController.

Все примеры, которые я вижу для настройки представлений на основе JSON, используют ContentNegotiatingViewResolver. Но мне кажется это излишним, поскольку этот преобразователь предназначен для ситуаций, когда один и тот же URL-адрес может давать разные выходные данные.

Я просто хочу, чтобы мой RestServicesController всегда производил MappingJacksonJsonView(s).

Есть ли более простой и понятный способ просто направить контроллер на это?

Ответы [ 3 ]

12 голосов
/ 21 марта 2011

Есть ли более простой и понятный способ просто направить контроллер на это?

Да, есть.Вы можете посмотреть на этот образец, который я разместил на Весенних форумах .Короче говоря, я предпочитаю делать это через следующее.

ApplicationContext:

<!-- json view, capable of converting any POJO to json format -->
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>

Контроллер

@RequestMapping("/service")
public ModelAndView getResultAsJson() {
    Object jsonObj = // the java object which we want to convert to json
    return new ModelAndView("jsonView", "result", jsonObj);
}

РЕДАКТИРОВАТЬ 2013: В эти современные времена подход @ skaffman был бы хорошей альтернативой.

9 голосов
/ 21 марта 2011

Если все, что вам нужно сделать, это вывести JSON, то сам слой представления является избыточным.Вы можете использовать аннотацию @ResponseBody , чтобы поручить Springу сериализовать вашу модель напрямую, используя Джексона.Это требует меньше конфигурации, чем подход MappingJacksonJsonView, и код менее загроможден.

3 голосов
/ 21 марта 2011

Пока вы используете mvc: на основе аннотаций и Джексон находится на пути к классам, все, что вам нужно сделать, это использовать @ResponseBody в ваших методах, и возвращаемый тип будет преобразован в JSONсогласно стандарту Spring HTTP Message Conversion функциональность.

Также посмотрите это видео около 37:00: Mastering Spring MVC .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...