Sobes.tech
Назад к вопросам
Junior — Middle
54

Каким образом в 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-объекты.