HttpMessageConverters

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

Кто превращает JSON в Java и обратно

Когда метод с @RequestBody получает Java-объект, или REST-controller возвращает DTO в теле ответа, Spring MVC не выполняет преобразование «само по себе». Для чтения и записи тела HTTP-сообщения используются реализации HttpMessageConverter.

Converter связывает формат HTTP-сообщения с Java-типом. Например, при работе с JSON подходящий converter может десериализовать входной JSON в DTO и сериализовать возвращаемый DTO обратно в JSON.

@PostMapping(
        path = "/users",
        consumes = "application/json",
        produces = "application/json")
UserDto create(@RequestBody CreateUserRequest request) {
    return userService.create(request);
}

В этом endpoint тело запроса ожидается как application/json, а ответ также объявлен как JSON. Spring MVC выбирает converter, который умеет работать с нужным media type и соответствующими Java-типами.

Content-Type и Accept

Заголовок Content-Type описывает формат тела, которое отправляет сторона запроса или ответа. Заголовок Accept сообщает, какие форматы ответа клиент готов принять. Эти данные вместе с типами метода помогают Spring MVC выбрать способ чтения или записи сообщения.

Именно поэтому один и тот же controller может работать на уровне Java-объектов, а детали JSON-представления остаются отдельным инфраструктурным слоем.

Ошибка преобразования происходит до бизнес-логики контроллера. Если тело запроса нельзя прочитать как ожидаемый Java-тип или для media type нет подходящего converter, Spring MVC не сможет передать корректный аргумент в метод.