RequestBody и ResponseBody

Базовый Spring
≈ 1 мин чтения

Тело запроса как Java-объект

Для создания или изменения ресурса клиент часто отправляет данные в теле HTTP-запроса, например JSON. Аннотация @RequestBody говорит Spring MVC прочитать тело сообщения и преобразовать его в объект указанного типа.

record CreateUserRequest(String name, String email) {}

@PostMapping("/users")
@ResponseBody
UserDto create(@RequestBody CreateUserRequest request) {
    return userService.create(request);
}

Контроллер получает готовый CreateUserRequest, а не исходную JSON-строку. Это позволяет работать с обычными Java-типами и не смешивать разбор формата сообщения с логикой метода.

Возвращаемое значение как тело ответа

Аннотация @ResponseBody означает, что результат метода нужно записать в тело HTTP-ответа, а не воспринимать, например, как имя представления. Если клиент ожидает JSON и для типа доступно подходящее преобразование, объект будет сериализован в JSON.

Таким образом, @RequestBody работает на входе, а @ResponseBody — на выходе. Конкретный механизм выбора и выполнения преобразования сообщения мы разберём в конце раздела.

DTO удобнее использовать как границу web-слоя. Контракт HTTP-запроса не обязан совпадать с внутренней моделью приложения, поэтому отдельный тип вроде CreateUserRequest делает эту границу явной.