Kako čitati HTTP zaglavlja u proljetnim REST kontrolerima

1. Uvod

U ovom ćemo brzom vodiču pogledati kako pristupiti HTTP zaglavljima u kontroleru proljetnog odmora.

Prvo ćemo koristiti @RequestHeader napomena za čitanje zaglavlja pojedinačno, kao i sve zajedno.

Nakon toga ćemo dublje pogledati @RequestHeaderAtributi.

2. Pristup HTTP zaglavljima

2.1. Pojedinačno

Ako trebamo pristup određenom zaglavlju, možemo konfigurirati @RequestHeader s nazivom zaglavlja:

@GetMapping ("/ pozdrav") javni ResponseEntity pozdrav (@RequestHeader ("accept-language") Jezik niza) {// kôd koji koristi jezičnu varijablu vraća novi ResponseEntity (pozdrav, HttpStatus.OK); }

Tada možemo pristupiti vrijednosti pomoću varijable koja je proslijeđena u našu metodu. Ako zaglavlje s imenom prihvatiti-jezik nije pronađen u zahtjevu, metoda vraća pogrešku "400 loših zahtjeva".

Naša zaglavlja ne moraju biti nizovi. Na primjer, ako znamo da je zaglavlje broj, svoju varijablu možemo deklarirati kao numerički tip:

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

2.2. Sve odjednom

Ako nismo sigurni koja će zaglavlja biti prisutna ili nam ih treba više nego što želimo u potpisu naše metode, možemo koristiti @RequestHeader napomena bez određenog naziva.

Za naš varijabilni tip imamo nekoliko izbora: a Karta, a MultiValueMap ili a HttpHeaders objekt.

Prvo, uzmimo zaglavlja zahtjeva kao a Karta:

@GetMapping ("/ listHeaders") javni ResponseEntity listAllHeaders (@RequestHeader Map headers) {headers.forEach ((key, value) -> {LOG.info (String.format ("Header '% s' =% s", key , vrijednost));}); vrati novi ResponseEntity (String.format ("Navedena% d zaglavlja", headers.size ()), HttpStatus.OK); }

Ako koristimo a Karta a jedno od zaglavlja ima više vrijednosti, dobit ćemo samo prvu vrijednost. Ovo je ekvivalent korištenju getFirst metoda na a MultiValueMap.

Ako naša zaglavlja mogu imati više vrijednosti, možemo ih dobiti kao MultiValueMap:

@GetMapping ("/ multiValue") javna ResponseEntity multiValue (@RequestHeader MultiValueMap zaglavlja) {headers.forEach ((key, value) -> LOG.info (String.format ("Header '% s' =% s", key, value.stream (). collect (Collectors.joining ("); vrati novi ResponseEntity (String.format (" Navedeni% d zaglavlja ", headers.size ()), HttpStatus.OK);}

Također možemo dobiti naša zaglavlja kao an HttpHeaders objekt:

@GetMapping ("/ getBaseUrl") javni ResponseEntity getBaseUrl (zaglavlja @RequestHeader HttpHeaders) {InetSocketAddress host = headers.getHost (); URL adresa niza = "//" + host.getHostName () + ":" + host.getPort (); vrati novi ResponseEntity (String.format ("Osnovni URL =% s", url), HttpStatus.OK); }

The HttpHeaders objekt ima pristupnike za uobičajena zaglavlja aplikacija.

Kada pristupimo zaglavlju po imenu iz a Karta, MultiValueMap ili HttpHeaders objekt, dobit ćemo a null ako nije prisutan.

3. @RequestHeader Atributi

Sad kad smo prošli osnove pristupa zaglavljima zahtjeva s @RequestHeader napomena, pogledajmo bliže njezine atribute.

Već smo koristili Ime ili vrijednost atributi implicitno kada smo posebno imenovali svoje zaglavlje:

javni pozdrav ResponseEntity (@RequestHeader ("accept-language") Jezični jezik) {}

To isto možemo postići i pomoću Ime atribut:

javni pozdrav ResponseEntity (@RequestHeader (name = "accept-language") Jezik niza) {}

Dalje, upotrijebimo vrijednost atribut potpuno isti način:

javni pozdrav ResponseEntity (@RequestHeader (value = "accept-language") Jezik niza) {}

Kada zaglavlje imenujemo izričito, zaglavlje je zadano. Ako zaglavlje nije pronađeno u zahtjevu, kontroler vraća pogrešku 400.

Iskoristimo potreban atribut koji označava da naše zaglavlje nije potrebno:

@GetMapping ("/ nonRequiredHeader") javni ResponseEntity evaluNonRequiredHeader (@RequestHeader (value = "optional-header", required = false) String optionalHeader) {return new ResponseEntity (String.format ("Je li bilo obavezno zaglavlje?% S!" , (optionalHeader == null? "Ne": "Da")), HttpStatus.OK); }

Od naša će varijabla biti null ako zaglavlje nije prisutno u zahtjevu, moramo biti sigurni da radimo odgovarajuće null provjeravanje.

Iskoristimo zadana vrijednost atribut za pružanje zadane vrijednosti za naše zaglavlje:

@GetMapping ("/ default") javni ResponseEntity evaluDefaultHeaderValue (@RequestHeader (value = "optional-header", defaultValue = "3600") int optionalHeader) {return new ResponseEntity (String.format ("Opcionalno zaglavlje je% d", optionalHeader ), HttpStatus.OK); }

4. Zaključak

U ovom kratkom vodiču naučili smo kako pristupiti zaglavljima zahtjeva u Spring REST kontrolerima. Prvo smo koristili @RequestHeader napomena za isporuku zaglavlja zahtjeva našim metodama kontrolera.

Nakon što smo pogledali osnove, detaljno smo pogledali atribute za @RequestHeader bilješka.

Primjer koda dostupan je na GitHubu.


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