Есть ли способ получить поведение типа @ ResponseBody, используя ModelAndView? - PullRequest
1 голос
/ 21 ноября 2011

Мне кажется, что Rails правильно понимает конструкцию контроллера: вы можете использовать действие контроллера index как для листингов, так и для поисков, и даже для вызовов ajax, потому что вам не нужно указыватьтип возврата типичным способом.

Однако в Spring, поскольку мне нужно либо вернуть ModelAndView для более традиционного действия, я не могу легко вернуть чистый json.Я обнаружил, что мне часто приходится создавать несколько действий для вызовов ajax, которые в основном одинаковы ... но поскольку для аннотаций и типов, отличных от ajax, требуются разные аннотации и типы возвращаемых данных, у меня должно быть 2 действия контроллера.

Есть ли способ заставить Spring работать с ajax без использования аннотаций типа @RequestBody?Могу ли я иметь 1 действие контроллера, которое возвращает ModelAndView и будет работать даже для вызовов ajax, которые не требуют представлений?

Я действительно хотел бы вообще избежать @RequestBody.Это не только побуждает меня дублировать действия контроллера, которые по сути одинаковы, что приводит к раздуванию моего интерфейса RESTful, но также усложняет их тестирование с использованием HandlerAdapter, так как вы всегда должны использовать ModelAndView в любом случае.

1 Ответ

3 голосов
/ 21 ноября 2011

Это можно сделать с помощью ViewResolver, который делегировал бы рендеринг ответа различным реализациям View в зависимости от некоторых свойств запроса.

Spring уже имеет MarshallingView и MappingJacksonJsonView для визуализации ответов XML и JSON. Более того, Spring имеет ContentNegotiatingViewResolver именно для этой цели, хотя его логика выглядит довольно сложной и хрупкой.

Итак, вы можете использовать ContentNegotiatingViewResolver или создать свой собственный ViewResolver для решения этой проблемы.

...