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




Попробуйте использовать 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 из метода вашего контроллера.
Отвечает ли это на ваш вопрос? Springframework получает все заголовки запросов