Множественная аннотация SpringBoot @RequestHeader только для одного заголовка MapJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Множественная аннотация SpringBoot @RequestHeader только для одного заголовка Map

Сообщение Anonymous »

SringBoot имеет знаменитую конструкцию для извлечения всех заголовков запросов:

Код: Выделить всё

@RestController
public class AllHeaderController {

@GetMapping("/print-all-headers")
public void getAllheaders(@RequestHeader Map headers){
headers.forEach((key,value) ->{
System.out.println("Header Name: "+key+" Header Value: "+value);
});
HeadersInformation headersInformation = headersInformationService.furtherCheckAllHeaders(headers); //just one param here
}
}
Плюсы: если заголовков много, мы можем получить их все в одной переменной.
Минусы: Здесь отсутствует возможность детального контроля и документирования каждого заголовка.
С другой стороны, Spring также предлагает @RequestHeader для каждой переменной: р>

Код: Выделить всё

    String oneByOne(@RequestHeader(value = "X-MY-CUSTOM-HEADER-ONE", required = true) final String one,
@RequestHeader(value = "X-MY-CUSTOM-HEADER-TWO", required = false, defaultValue = "two") final String two,
@RequestHeader(value = "X-MY-CUSTOM-HEADER-THREE", required = false) final String three,
@RequestHeader(value = "X-MY-CUSTOM-HEADER-FOUR") @Parameter(description = "some specific swagger description for header four") final String four,

[...]

@RequestHeader(value = "X-MY-CUSTOM-HEADER-HUNDRED", required = false, defaultValue = "two") @Parameter(description = "some specific description for header 100") final String hundred) {
HeadersInformation headersInformation = headersInformationService.furtherCheckAllHeaders(one, two, thee ... , ninetynine, hundred); //OMG!
Плюсы: мы можем аннотировать имя заголовка, можем добавлять или нет, некоторые значения по умолчанию и генерировать некоторую документацию Swagger. Также мы получаем из коробки 400 неверных запросов, если отсутствует заголовок и т.д.
Минусы: В случае, если заголовков много, скажем в нашем пример 100 параметров метода, метод становится очень трудным для чтения и его очень сложно поддерживать (добавлять или удалять заголовок).
Я попытался использовать лучшее из двух миров, написав:

Код: Выделить всё

   String bestOfTwoWorlds(@RequestHeader(value = "X-MY-CUSTOM-HEADER-ONE", required = true),
@RequestHeader(value = "X-MY-CUSTOM-HEADER-TWO", required = false, defaultValue = "two"),
@RequestHeader(value = "X-MY-CUSTOM-HEADER-THREE", required = false),
@RequestHeader(value = "X-MY-CUSTOM-HEADER-FOUR") @Parameter(description = "some specific swagger description for header four"),
@RequestHeader(value = "X-MY-CUSTOM-HEADER-HUNDRED", required = false, defaultValue = "two") @Parameter(description = "some specific description for header 100"),
Map String allHeaders) {
HeadersInformation headersInformation = headersInformationService.furtherCheckAllHeaders(headers);
Я надеялся, что что-то подобное сработает.
Вопрос:
Могу ли я спросить, есть ли решение, в котором мы можем получить лучшее из двух миров, то есть иметь возможность использовать карту заголовков в одной переменной, а также иметь аннотацию для каждого заголовка?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -string-he
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»