Подтвердить что ты не робот

Каковы допустимые типы возвращаемых данных для метода контроллера 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. Но я не уверен в этом. Может быть, подобный метод может возвращать и некоторые другие объекты?

4b9b3361

Ответ 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. Этот метод имеет несколько условий, основанных на типе возвращаемого значения, чтобы выбрать, что делать с возвращаемым значением.