2014-04-20 5 views
0

У меня есть веб-приложение, построенное поверх Spring MVC, уже работающего. Я планирую предоставить мобильным пользователям приложение для общения с сервером, поэтому им будет легче взаимодействовать с ним. У меня есть модель, представления и контроллеры, работающие нормально, но все было разработано с точки зрения Интернета.Мобильное приложение + Spring MVC - JSP?

Итак, я создаю несколько новых контроллеров для мобильного приложения, и возникает вопрос: поскольку окончательный ответный вопрос в представлении представляет собой мобильное приложение, о котором идет речь, где я должен делегировать все приложение, в Контроллере (готовят там JSON для каждого ответа)? Или должен ли я иметь JSP с включенным taglib JSON, так что контроллер дает части JSP, а затем я создаю ответ JSON в JSP?

Я не совсем понимаю архитектуру MVC в этом сценарии.

Заранее спасибо.

ответ

1

Когда все, что вы делаете, это создать REST API, который мобильные (или другие клиенты) будут использовать, Views не вступают в игру. Контролер отвечает за подготовку соответствующего ответа для клиента.

К счастью, поскольку возвращение JSON является таким распространенным сценарием, Spring MVC прозрачно обрабатывает сериализацию в JSON (используя библиотеку Джексона), так что вам не нужно.

Как показал JB Nizet, вы можете использовать @ResponseBody аннотацию сказать Spring MVC, что ответ должен быть возвращен как (сериализовать в формате JSON из-за produces = MediaType.APPLICATION_JSON_VALUE), или если вы используете Spring 4, вы можете полностью угробить @ResponseBody аннотации и аннотации вашего контроллера с помощью @RestController (что приводит к тому, что Spring ведет себя так, как если бы @ResponeBody был добавлен к каждому методу) вместо @Controller.

1

Методы контроллера должны просто вернуть obejcts (или коллекции объектов), которые будут сериализованы в формате JSON автоматически благодаря @ResponseBody аннотацию:

@RequestMapping(value = "/api/users", 
       method = RequestMethod.GET, 
       produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public List<User> listUsers() { 
    ... 
} 
+0

Спасибо за ваш ответ. Я использую '@ ResponseBody' для обработки вызовов AJAX через веб-приложение, так что я думаю, что это сделало бы это. Я отмечаю другой ответ как «ответ» только потому, что он рассказывает немного больше о моих сомнениях относительно разработки MVC и мобильных приложений. – Azurlake

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