Каковы допустимые типы возвращаемых данных для метода контроллера Spring MVC?
У меня мало опыта в Spring MVC, и у меня есть следующее о , каковы типы возврата valids, которые метод контроллера может возвращать.
Итак, я знаю, что пользователь генерирует HttpRequest, полученный и обработанный DispatcherServlet, который отправляет этот запрос определенному классу контроллера.
Класс контроллера выглядит примерно так:
@Controller
public class AccountController {
@RequestMapping("/showAccount")
public String show(@RequestParam("entityId") long id, Model model) {
...
}
.......................................
.......................................
.......................................
}
Итак, я знаю, что каждый метод обрабатывает определенный запрос и что обработанный запрос задается аннотацией @RequestMapping.
Я также знаю, что метод возвращает объект String, который является именем логического представления (который затем разрешается с помощью view resolver). отобразить представление)
Итак, на этом этапе я думаю, что метод класса контроллера возвращает только String. Но я не уверен в этом. Может быть, подобный метод может возвращать и некоторые другие объекты?
Ответы
Ответ 1
Существует много типов возврата для метода Handler, который аннотируется внутренним контроллером @RequestMapping
, например:
-
ModelAndView (класс)
-
Модель (интерфейс)
- Карта
- Строка
- void
- Просмотр
-
HttpEntity<?>
или ResponseEntity<?>
-
HttpHeaders
и многое другое..... См. Документы
Каждый тип возвращаемого типа имеет свое специфическое использование, например, если вы используете String, то это означает, что оно возвращает View Name, и это имя вида будет разрешено с помощью ViewResolver
. Если вы не хотите возвращать какое-либо имя вида, укажите тип возврата void. Если вы хотите установить имя представления, а также хотите, чтобы какой-либо объект использовал ModelAndView
в качестве возвращаемого типа.
Просьба ознакомиться с документацией, в которой вы также найдете способ аргумента метода, который мы можем передать в методе обработчика.
Ответ 2
У вас есть прямой ответ в doc
Обратите особое внимание на
Если метод аннотируется с помощью @ResponseBody, возвращаемый тип записанный в тело ответа ответа. Возвращаемое значение будет преобразовано к объявленному типу аргумента метода с использованием HttpMessageConverters.
Когда метод аннулируется с помощью @ResponseBody, тип возврата может быть любым настраиваемым типом, любым Java pojo, который инфраструктура будет преобразовывать в соответствующий повторный JSON, XML или тому подобное и записывать обратно в тело ответа
Ответ 3
вы можете взглянуть на AnnotationMethodHandlerAdapter # getModelAndView. Этот метод имеет несколько условий, основанных на типе возвращаемого значения, чтобы выбрать, что делать с возвращаемым значением.