Код: Выделить всё
@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!
Минусы: В случае, если заголовков много, скажем в нашем пример 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
Мобильная версия