В Spring Framework, Controller и RestController являются различными типами контроллеров, предназначенными для обработки HTTP-запросов, но с разными целями и поведением.
@Controller
Обычный Controller в Spring предназначен для обработки HTTP-запросов и возвращения результата, который может быть представлен в виде HTML-страницы, JSON, XML или любого другого формата.
В примере на запрос по url /hello будет возвращено thymeleaf view "hello".
@RestController
RestController расширяет функциональность Controller и добавляет аннотации @ResponseBody, что означает, что результаты методов контроллера автоматически сериализуются в формат JSON или XML и напрямую возвращаются клиенту.
Пример с аналогичным поведением, но с аннотацией @Controller: