Controller – это один из
стереотипов Spring Framework. Компоненты такого типа обычно занимаются обработкой сетевых запросов. Контроллер состоит из набора методов-обработчиков, помеченных аннотацией
@RequestMapping.
Ответ на запрос можно сформировать разными способами: например просто вернуть из обработчика строку с именем jsp-файла, или же вернуть
ResponseBodyEmitter, который будет асинхронно заполняться данными позже. Все возможные варианты перечислены
в документации.
Большинство современных API реализуется по архитектуре
REST. В ней каждая сущность доступна под собственным URI. В методе-обработчике возвращается экземпляр класса этой сущности, который преобразуется в ответ сервера одним из
HttpMessageConverter-ов. Например, в JSON его превратит
MappingJackson2HttpMessageConverter. Чтобы использовать этот способ ответа, метод, или весь контроллер, должен иметь аннотацию
@ResponseBody.
@RestController – это просто сокращенная запись для
@Controller +
@ResponseBody.