Ako čítať hlavičky HTTP na jar v radičoch REST

1. Úvod

V tomto rýchlom výučbe sa pozrieme na to, ako získať prístup k hlavičkám HTTP v Spring Rest Controller.

Najprv použijeme @RequestHeader anotáciu na čítanie hlavičiek jednotlivo aj spolu.

Potom sa podrobnejšie pozrieme na @RequestHeaderAtribúty.

2. Prístup k hlavičkám HTTP

2.1. Individuálne

Ak potrebujeme prístup k konkrétnej hlavičke, môžeme nakonfigurovať @RequestHeader s názvom hlavičky:

@GetMapping ("/ pozdrav") public ResponseEntity pozdrav (@RequestHeader ("accept-language") reťazcový jazyk) {// kód, ktorý používa jazykovú premennú, vráti nový ResponseEntity (pozdrav, HttpStatus.OK); }

Potom môžeme získať prístup k hodnote pomocou premennej odovzdanej do našej metódy. Ak je hlavička pomenovaná prijať jazyk sa v požiadavke nenájde, metóda vráti chybu „400 zlých požiadaviek“.

Naše hlavičky nemusia byť reťazce. Napríklad, ak vieme, že naša hlavička je číslo, môžeme našu premennú vyhlásiť za číselný typ:

@GetMapping ("/ double") public ResponseEntity doubleNumber (@RequestHeader ("my-number") int myNumber) {return new ResponseEntity (String.format ("% d * 2 =% d", myNumber, (myNumber * 2)) ), HttpStatus.OK); }

2.2. Naraz

Ak si nie sme istí, ktoré hlavičky budú prítomné, alebo ich v podpise našej metódy potrebujeme viac, ako by sme chceli, môžeme použiť @RequestHeader anotácia bez konkrétneho názvu.

Pre náš typ premennej máme niekoľko možností: a Mapa, a MultiValueMap alebo a HttpHeaders objekt.

Najprv si vezmeme hlavičky žiadosti ako a Mapa:

@GetMapping ("/ listHeaders") public ResponseEntity listAllHeaders (@RequestHeader Map headers) {headers.forEach ((key, value) -> {LOG.info (String.format ("Header '% s' =% s", kľúč , hodnota));}); vrátiť nové ResponseEntity (String.format ("Zoznam% d hlavičiek", headers.size ()), HttpStatus.OK); }

Ak použijeme a Mapa a jedno z hlavičiek má viac ako jednu hodnotu, dostaneme iba prvú hodnotu. Toto je ekvivalent použitia súboru getFirst metóda na a MultiValueMap.

Ak môžu mať naše hlavičky viac hodnôt, môžeme ich získať ako a MultiValueMap:

@GetMapping ("/ multiValue") verejná ResponseEntity multiValue (@RequestHeader MultiValueMap hlavičky) {headers.forEach ((kľúč, hodnota) -> LOG.info (String.format ("Hlavička '% s' =% s", kľúč, value.stream (). collect (Collectors.joining ("); return new ResponseEntity (String.format (" Listed% d headers ", headers.size ()), HttpStatus.OK);}

Môžeme dostať aj svoje hlavičky ako HttpHeaders objekt:

@GetMapping ("/ getBaseUrl") public ResponseEntity getBaseUrl (hlavičky @RequestHeader HttpHeaders) {InetSocketAddress host = headers.getHost (); Reťazec url = "//" + host.getHostName () + ":" + host.getPort (); návrat new ResponseEntity (String.format ("Base URL =% s", url), HttpStatus.OK); }

The HttpHeaders objekt má prístupové práva pre bežné hlavičky aplikácií.

Keď pristupujeme k hlavičke podľa mena z a Mapa, MultiValueMap alebo HttpHeaders objekt, dostaneme nulový ak nie je prítomný.

3. @RequestHeader Atribúty

Teraz, keď sme si prečítali základné informácie o prístupe k hlavičkám požiadaviek pomocou @RequestHeader anotáciu, pozrime sa bližšie na jej atribúty.

Už sme použili názov alebo hodnotu implicitne, keď sme konkrétne pomenovali našu hlavičku:

verejný pozdrav ResponseEntity (@RequestHeader ("accept-language") reťazcový jazyk) {}

To isté môžeme dosiahnuť pomocou názov atribút:

verejný pozdrav ResponseEntity (@RequestHeader (name = "accept-language") reťazcový jazyk) {}

Ďalej použijeme hodnotu atribút úplne rovnakým spôsobom:

verejný pozdrav ResponseEntity (@RequestHeader (value = "accept-language") reťazcový jazyk) {}

Keď konkrétne pomenujeme hlavičku, štandardne je hlavička povinná. Ak sa hlavička v požiadavke nenájde, radič vráti chybu 400.

Použime požadovaný atribút označujúci, že naša hlavička sa nevyžaduje:

@GetMapping ("/ nonRequiredHeader") verejná ResponseEntity evaluateNonRequiredHeader (@RequestHeader (value = "optional-header", required = false) String optionalHeader) {return new ResponseEntity (String.format ("Bola prítomná voliteľná hlavička?% S!" , (optionalHeader == null? "No": "Yes")), HttpStatus.OK); }

Odkedy naša premenná bude nulový ak hlavička nie je v požiadavke, musíme sa uistiť, že robíme správne nulový kontrola.

Použime predvolená hodnota atribút na poskytnutie predvolenej hodnoty pre našu hlavičku:

@GetMapping ("/ default") public ResponseEntity evaluateDefaultHeaderValue (@RequestHeader (value = "optional-header", defaultValue = "3600") int optionalHeader) {return new ResponseEntity (String.format ("Optional Header is% d", optionalHeader ), HttpStatus.OK); }

4. Záver

V tomto krátkom tutoriáli sme sa naučili, ako získať prístup k hlavičkám požiadaviek v radičoch Spring REST. Najprv sme použili @RequestHeader anotácia na dodanie hlavičiek požiadaviek našim metódam radiča.

Po zoznámení sa so základmi sme sa podrobne pozreli na atribúty súboru @RequestHeader anotácia.

Vzorový kód je k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found