Какой тип возвращаемого значения используется в spring mvc в методе @RequestMapping?

Я знаю, что в spring mvc в классе @Controller в методе @RequestMapping я могу вернуться

  • Строка
  • Модель
  • ModelAndView

Я не понимаю различий между этими действиями. Можете ли вы мне это объяснить?

Ответ 1

В Spring 3.2.x есть больше, чем только те 3. См. документы на веб-сайте Spring. Ласты Spring (4.2.x) документация.

Ниже приведены поддерживаемые типы возвращаемых значений:

  • Объект ModelAndView с моделью, неявно обогащенной объектами команд и результатами @ModelAttribute методов доступа к аннотированным ссылочным данным.
  • Объект Модель, при этом имя вида неявно определяется через RequestToViewNameTranslator и модель, неявно обогащенную командами, и результаты @ModelAttribute методов доступа к аннотированным ссылочным данным.
  • Объект Карта для отображения модели с именем вида, неявно определяемым через RequestToViewNameTranslator, и модель, неявно обогащенная командами, и результаты @ModelAttribute методов доступа к аннотированным ссылочным данным. li >
  • Объект Вид, при этом модель неявно определяется с помощью объектов команд и @ModelAttribute методов доступа к аннотированным ссылочным данным. Метод обработчика также может программно обогатить модель, объявив аргумент модели (см. Выше).
  • Значение String, которое интерпретируется как имя логического представления, с моделью, неявно определяемой с помощью объектов команд и @ModelAttribute методов доступа к аннотированным ссылочным данным. Метод обработчика также может программно обогатить модель, объявив аргумент модели (см. Выше).
  • void, если метод обрабатывает сам ответ (путем непосредственного написания содержимого ответа, объявления аргумента типа ServletResponse/HttpServletResponse для этой цели) или если имя представления предполагается неявным образом определить через RequestToViewNameTranslator (не объявление аргумента ответа в сигнатуре метода обработчика).
  • Если метод аннотируется с помощью @ResponseBody, возвращаемый тип записывается в тело ответа ответа. Возвращаемое значение будет преобразовано в тип аргумента объявленного метода с использованием HttpMessageConverters. См. Раздел "Сопоставление тела ответа с аннотацией @ResponseBody".
  • Объект HttpEntity ** или ** ResponseEntity, чтобы обеспечить доступ к HTTP-заголовкам и содержимому ответа на сервлет. Тело объекта будет преобразовано в поток ответов с использованием HttpMessageConverters. См. Раздел "Использование HttpEntity".
  • A Callable может быть возвращен, когда приложение хочет получить возвращаемое значение асинхронно в потоке, управляемом Spring MVC.
  • A DeferredResult может быть возвращен, когда приложение хочет получить возвращаемое значение из потока по своему выбору.
  • Любой другой тип возвращаемого значения считается единственным атрибутом модели, который должен быть открыт для представления, используя имя атрибута, указанное через @ModelAttribute на уровне метода (или имя атрибута по умолчанию, основанное на имени класса типа возврата). Модель неявно обогащена командами и результатами @ModelAttribute методов доступа к аннотированным ссылочным данным.

Ответ 2

Если ваш тип возврата void или вы не комментируете свой метод с помощью @ResponseBody, Spring MVC попытается разрешить View, чтобы отобразить ответ.

Следовательно, вы должны как-то указать инфраструктуру на экземпляр View или на имя представления как String в возвращаемом значении (или полагаться на неявное разрешение и, возможно, возвращать только Model); если вы вернете имя (либо просто String, либо внедрено в ModelAndView)), которое затем будет передано настроенному ViewResolver для получения фактического экземпляра View.

В контейнере ModelAndView содержится ссылка на имя View или вид, а также внедряется используемая модель.