HttpMessageConverters
Кто превращает 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-представления остаются отдельным инфраструктурным слоем.