Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring MVC parse JSON req and get json resp


Автор: 4epT 22.11.2012, 15:10
Всем привет. Делаю сервис, который будет принимать JSON запросы и отдавать JSON ответы. Все зпросы server-to-server по http. Json идет в теле запроса.

Хочется применить Spring. На сколько я понял, единственный вариант ловить спрингом запросы, это использование Spring MVC (контроллеров). Знаю что можно парсить JSON параметры запроса сразу в объекты, а можно как то автоматически парсить JSON, если он идет непосредственно в теле запроса ?

И как из Spring контроллера отдать JSON ответ ? Там везде нужно возвращать ModelAndView. Очень долго гуглил, так и не наше ничего ...  smile 

И может быть в моем случае можно что то использовать вместо Spring MVC ?

Автор: jk1 22.11.2012, 15:39
Цитата

И как из Spring контроллера отдать JSON ответ ? Там везде нужно возвращать ModelAndView. 


Ничего подобного, возвращать можно String, можно Stream, можно много чего еще, вплоть до void. Вот пример из нашего проекта, он показывает как писать ответ в контроллере:

Код

   @RequestMapping(value="/contacts/types", method = RequestMethod.GET)
   @ResponseBody
   public UserContactType[] getContactTypes() {
       List<UserContactType> types = service.getAvailableContactTypes();
       return types.toArray(new UserContactType[types.size()]);
   }


SpringMVC сгенерирует из возвращенного массива json array с содержимым данных типов

Автор: 4epT 22.11.2012, 15:46
Цитата(jk1 @ 22.11.2012,  15:39)
SpringMVC сгенерирует из возвращенного массива json array с содержимым данных типов

А не подскажете как он это сделает ? На каком этапе ?

В моем случае, Spring MVC не будет слишком громоздким ?

Автор: jk1 22.11.2012, 17:04
Цитата

В моем случае, Spring MVC не будет слишком громоздким ?


Все зависит от вашего случая. Если требуется всего навсего выставить пару REST-сервисов, то Spring MVC для этого явный overkill. Для такого случая берите любую реализацию JAX-RS, например Jersey или ResrEasy.
Если же есть приложение и так на Spring, а к нему надо прикрутить отдачу JSON, то Spring MVC вполне удобен, от него солюшен не потяжелеет.

Цитата

А не подскажете как он это сделает ? На каком этапе ?

При загрузке контекста парсер для начала отыщет <mvc:annotation-driven/>, затем поищет в classpath jackson. Если jakson нашелся, то становится возможен прямой маршалинг POJO-объекта через него в JSON.
Теперь после того, как отработает контроллер, хэндлер будет отдавать результат его работу Jakson'у для превращения в JSON и после будет формировать из этого JSON'а response.

Автор: 4epT 22.11.2012, 17:23
Цитата

При загрузке контекста парсер для начала отыщет <mvc:annotation-driven/>, затем поищет в classpath jackson. Если jakson нашелся, то становится возможен прямой маршалинг POJO-объекта через него в JSON.
Теперь после того, как отработает контроллер, хэндлер будет отдавать результат его работу Jakson'у для превращения в JSON и после будет формировать из этого JSON'а response. 


А можно ссылочку на какой нибудь пример ?

Приложение как раз планируется именно в виде сервиса, никаких view там не будет. От спринга не хотелось бы уходить, так как хотелось бы использовать его IoC и DAO.

Тогда наверное логично было бы уйти от Spring MVC и сделать просто Servlet как одну точку входа ?

Автор: jk1 25.11.2012, 22:26
Цитата

А можно ссылочку на какой нибудь пример ?


http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/

Цитата

Тогда наверное логично было бы уйти от Spring MVC и сделать просто Servlet как одну точку входа ? 

Не вижу тут логики. Раз спринг уже есть, то прикручивайте spring mvc, это будет очень легко. А если все же не хочется, то голые сервлеты использовать не советую - сделать можно, но будет очень уныло и долго. Альтернативой тут будет реализация любая JAX-RS: Jersey, RestEasy, Apache CXF, etc

Автор: 4epT 27.11.2012, 20:41
jk1, скажите пожалуйста, а Вы никода не работали с dropwizard ? Или может быть что то слышали о нем ...

Автор: jk1 29.11.2012, 11:42
Нет, не сталкивался с ним

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)