Каким образом в Spring реализовать REST-контроллер с использованием аннотации @RestController?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
@RestController в Spring — это удобный способ объявить REST-контроллер, который сразу возвращает данные в тело ответа, а не имя шаблона. Обычно вместе с ним используют @GetMapping, @PostMapping и другие mapping-аннотации для описания HTTP-эндпоинтов. Ответы чаще всего отдаются в JSON за счёт встроенной сериализации.
Определение:
@RestController — это составная аннотация Spring, которая объединяет @Controller и @ResponseBody. Это значит, что методы такого контроллера по умолчанию возвращают данные напрямую в HTTP-ответ, а Spring преобразует объекты в нужный формат, обычно JSON. Такой подход используют для построения REST API.
Пример использования:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class UserController {
@GetMapping("/users/{id}")
public Map<String, Object> getUser(@PathVariable Long id) {
return Map.of(
"id", id,
"name", "Ivan"
);
}
@PostMapping("/users")
public Map<String, Object> createUser(@RequestBody Map<String, Object> user) {
return user;
}
}
Пояснение кода:
Код показывает REST-контроллер с двумя эндпоинтами.
@RestController говорит Spring, что класс обслуживает HTTP-запросы и возвращает данные, а не страницу.
@GetMapping("/users/{id}") обрабатывает GET-запрос и берёт id из пути через @PathVariable.
@PostMapping("/users") обрабатывает POST-запрос и читает тело запроса через @RequestBody.
В обоих методах возвращается объект Map, который Spring автоматически сериализует в JSON.
Ключевые моменты:
@RestController=@Controller+@ResponseBody.- Используется для построения REST API, а не MVC-страниц.
- Возвращаемые объекты автоматически сериализуются, чаще всего в JSON.
- Для маршрутизации запросов применяются
@GetMapping,@PostMapping,@PutMapping,@DeleteMapping. - Для чтения данных из URL и тела запроса используются
@PathVariable,@RequestParam,@RequestBody. - Обычно в реальном проекте контроллер возвращает не
Map, а DTO-объекты.