В чём основное различие между @RestController и @Controller?
Этот вопрос проверяет понимание аннотаций Spring MVC и их применения в разработке API и веб-приложений.
Короткий ответ
@Controller используется для обработки запросов в традиционных веб-приложениях и возвращает HTML-представления. @RestController автоматически возвращает данные в формате JSON или XML, что делает его идеальным для создания RESTful API.
Длинный ответ
Аннотации @Controller и @RestController используются для создания контроллеров в Spring, но их подходы к обработке данных различаются.
@Controller:
- Это аннотация для создания веб-контроллеров, которые возвращают HTML.
- Она используется в приложениях, где сервер генерирует страницы для отображения пользователю.
- Если необходимо вернуть данные (например, JSON), нужно добавить аннотацию @ResponseBody.
Пример @Controller:
@Controller
public class MyController {
@RequestMapping("/greeting")
public String greet(Model model) {
model.addAttribute("message", "Hello, World!");
return "greeting"; // Имя HTML-шаблона
}
}
@RestController:
- Это аннотация для создания API, возвращающих данные (JSON, XML).
- По сути, это сочетание @Controller и @ResponseBody, поэтому данные автоматически сериализуются и отправляются в теле HTTP-ответа.
Пример @RestController:
@RestController
public class MyRestController {
@RequestMapping("/api/data")
public Map<String, String> getData() {
Map<String, String> data = new HashMap<>();
data.put("message", "Hello, World!");
return data; // JSON-ответ
}
}
Основное различие: @Controller подходит для веб-приложений с серверной генерацией страниц, а @RestController — для RESTful API, где важны данные, а не представления.
Заключение: Используйте @Controller для приложений с HTML-страницами и @RestController для API.