@Controller и @RestControllerСегодня поговорим о двух аннотациях в Spring —
@Controller и @RestController, разберём их различия и приведём примеры использования.Управление входящими HTTP-запросами — это самая типичная задача в разработке веб-приложений. Для этого в Spring и существуют аннотации
@Controller и @RestController.▶️Аннотация
@ControllerКак бы банально не звучало, но эта аннотация используется для определения классов в качестве контроллеров. Это помогает Spring определить компоненты, которые будут обрабатывать входящие запросы:
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, Spring MVC");
return "hello";
}
}
В этом примере метод hello() обрабатывает запрос на URL /hello и возвращает имя представления (hello), которое будет отображаться пользователю как ответ.
▶️Аннотация
@RestController@RestController появилась в Spring 4.0 и объединяет в себе две аннотации — @Controller и @ResponseBody. Это означает, что она не только помечает класс как Spring MVC Controller, но и автоматически преобразует возвращаемые данные в формат JSON или XML:@RestController
public class MyRestController {
@RequestMapping("/hello")
public String hello() {
return "Hello, Spring REST";
}
}
В этом случае, когда метод hello() обрабатывает запрос на URL /hello, он возвращает строку «Hello, Spring REST», которая автоматически преобразуется в формат JSON и отправляется в ответе на запрос.
Таким образом, основное различие между
@Controller и @RestController заключается в том, что @Controller используется для обработки веб-страниц, а @RestController — для создания RESTful веб-сервисов, которые возвращают данные в формате JSON или XML.Аннотация
@Controller может быть использована и для Web MVC, и для REST приложений, но в случае REST приложений к каждому методу контроллера придется добавлять аннотацию @ResponseBody для автоматического преобразования ответа в формат JSON или XML. Определить, MVC это приложение или REST, можно по наличию или отсутствию аннотации @ResponseBody в методах контроллера.100 🕺 — и я пишу новый пост
📱 Java Developer | #spring
