2015-10-11 8 views
4

Как @RestController является состав @Controller и @ResponseBody, я верю, что если я хочу, чтобы мой контроллер работать как MVC и REST контроллер просто аннотирования с @RestController должно быть хорошо. Это верно?Возвращаясь вид с Spring MVC @RestController

Как @RestController является состав @Controller и @ResponseBody, Я думаю, что это внутренне означает, что это хорошо для

  1. Прием запроса HTTP (из-за @Controller)
  2. Отправка ответ в формате JSON (из-за @ResponseBody) хотя он может быть изменен, если это необходимо.

ответ

9

@RestController не предназначен для использования в качестве возвращаемого разрешения. Предполагается вернуть данные, которые будут записаны в тело ответа, следовательно, включение @ResponseBody. Вы не можете выборочно отключить @ResponseBody по методам индивидуального обработчика, когда @ResponseBody уже является аннотацией на уровне класса.

Вы можете работать вокруг него, возвращая ModelAndView, который будет работать даже в @RestController, но вы действительно не должны:

@RequestMapping 
public ModelAndView renderFooList() { 
    ModelAndView mav = new ModelAndView("foo/list"); 
    mav.addObject("foos", fooService.getFoos()); 
    return mav; 
} 

Было бы лучше создать отдельные контроллеры для нормальных обработчиков возвращения взглядов и Контроллеры REST для материала RESTful. Или аннотировать класс простым @Controller и поставить @ResponseBody на методы, в которых вы действительно нуждаетесь.

+0

Не могли бы вы объяснить, почему только ModelAndView игнорирует RestController/ResponseBody? Также есть список классов, которые не будут преобразованы в json с помощью RestController/ResponseBody? – thangaraj

1

аннотация @RestController, которая отмечает этот класс как контроллер, где каждый метод возвращает домен obje ct/pojo вместо представления. Это означает, что мы больше не используем view-resolvers, мы не можем напрямую отправлять html в ответ, но мы отправляем объект домена, преобразованный в формат, понятный потребителям.

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