Spring Boot Rest – как сопоставить заголовки с DTO

я использую Spring Boot и мне нужно получить доступ к нескольким значениям из заголовков запроса, проблема в том, что @RequestHeader он принимает только одно свойство одновременно. Вместо того, чтобы каждый раз объявлять отдельные свойства, я хотел бы преобразовать это в DTO для лучшей организации. Используя параметры запроса, я могу использовать @ModelAttribute filters: FiltersDTO, и это работает. Есть ли эквивалентный подход для обработки заголовков запросов, где я могу напрямую сопоставить их с DTO?

Это мой код:

@PostMapping("blah")
suspend fun blah(
  @RequestHeader userInfo: UserHeaderDto
) {}
data class UserHeaderDto(
    val userId: Long,
    val name: String
){}

Я получаю исключение:

org.springframework.web.bind.MissingRequestHeaderException: Required request header 'userInfo' for method parameter type UserHeaderDto is not present

Отвечает ли это на ваш вопрос? Springframework получает все заголовки запросов

sidgate 16.05.2024 05:07

Нет, использование Map позволяет мне иметь все значения заголовков, но мне все равно нужно преобразовать их вручную в мой DTO, мне нужно какое-то решение, которое Spring делает это автоматически, например, с параметрами запроса с использованием ModelAttribute.

Teodoro 16.05.2024 15:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
2
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать Map<String, String> headers, и тогда у вас появится класс RequestHeadersExtractor, который инкапсулирует логику извлечения заголовков запроса.

Взгляните на приведенный ниже пример:

@Service
@Slf4j
public class RequestHeadersExtractor {
// declare your request headers
    public static final String USER_ID = "user-id";
    public static final String NAME = "name";

    public SampleDto extractHeaders(Map<String, String> headers) {

    // populate your dto here with the fields and return it.

    }
}

Затем вы можете вызвать extractHeaders из метода вашего контроллера.

Другие вопросы по теме

Похожие вопросы

Spring Cloud Stream Kafka Binder - повторные попытки не работают при использовании DLQ в пакетном режиме
Миграция SpringBoot3 с использованием PathVariable не показывает ее как параметр, когда вызов завершается, выдавая 500 Внутренняя ошибка сервера
Написание тестов уровня сервиса и репозитория для JPA RESTful API в Springboot
Как преобразовать MultiPartFile в Mono<FilePart>
SpringBoot — бин не найден
Как настроить приложение Java Spring Boot для отправки сообщения в служебную шину Azure
Я хочу знать, почему мой контроллер дает вложенный ответ
Лучшая практика написания модульного теста пользовательской реализации Spring ApplicationRunner и передачи в нее вариантов ApplicationArguments
Невозможно подключиться к автономной базе данных Oracle с помощью Springboot и кошелька TNS
SpringBoot – мой проект использует базу данных в памяти, и я не знаю, как прекратить это делать и перейти на настоящую постоянную базу данных