Hogyan olvassuk el a HTTP fejléceket a tavaszi REST vezérlőkben

1. Bemutatkozás

Ebben a gyors bemutatóban megvizsgáljuk, hogyan lehet elérni a HTTP fejléceket egy rugós pihenés vezérlőben.

Először a @ RequestHeader annotáció a fejlécek külön-külön és együttes olvasásához.

Ezt követően mélyebben megvizsgáljuk a @ RequestHeader’S tulajdonságai.

2. Hozzáférés a HTTP fejlécekhez

2.1. Egyénileg

Ha szükségünk van egy adott fejlécre, konfigurálhatjuk @ RequestHeader a fejléc nevével:

@GetMapping ("/ greeting") public ResponseEntity greeting (@RequestHeader ("accept-language") String language) {// a nyelvi változót használó kód új ResponseEntity-t ad vissza (üdvözlet, HttpStatus.OK); }

Ezután hozzáférhetünk az értékhez a módszerünkbe átadott változó segítségével. Ha egy fejléc nevű elfogad-nyelv nem található a kérésben, a módszer „400 hibás kérés” hibát ad vissza.

A fejlécünknek nem kell húrnak lennie. Például, ha tudjuk, hogy a fejlécünk szám, akkor deklarálhatjuk változónkat numerikus típusként:

@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. Egyszerre

Ha nem vagyunk biztosak benne, melyik fejlécek lesznek jelen, vagy többre van szükségünk, mint amennyit a módszerünk aláírásában szeretnénk, @ RequestHeader megjegyzés külön név nélkül.

A változó típusunkra van néhány választási lehetőségünk: a Térkép, a MultiValueMap vagy a HttpHeaders tárgy.

Először kapjuk meg a kérés fejléceket a-ként Térkép:

@GetMapping ("/ listHeaders") public ResponseEntity listAllHeaders (@RequestHeader Map fejlécek) {headers.forEach ((kulcs, érték) -> {LOG.info (String.format ("Header '% s' =% s", kulcs) , értéke));}); return new ResponseEntity (String.format ("Listed% d fejléc", headers.size ()), HttpStatus.OK); }

Ha a Térkép és az egyik fejlécnek több értéke van, csak az első értéket kapjuk meg. Ez egyenértékű a getFirst módszer a MultiValueMap.

Ha a fejlécünknek több értéke lehet, akkor a-ként kaphatjuk meg őket MultiValueMap:

@GetMapping ("/ multiValue") public ResponseEntity multiValue (@RequestHeader MultiValueMap fejlécek) {headers.forEach ((kulcs, érték) -> LOG.info (String.format ("Header '% s' =% s", kulcs, value.stream (). collect (Collectors.joining ("); return new ResponseEntity (String.format (" Listed% d heaers ", header.size ()), HttpStatus.OK);}

A fejlécünket is megkaphatjuk mint egy HttpHeaders tárgy:

@GetMapping ("/ getBaseUrl") public ResponseEntity getBaseUrl (@RequestHeader HttpHeaders fejlécek) {InetSocketAddress host = headers.getHost (); Karakterlánc URL = "//" + host.getHostName () + ":" + host.getPort (); return new ResponseEntity (String.format ("Alap URL =% s", url), HttpStatus.OK); }

A HttpHeaders Az objektum rendelkezik hozzáféréssel a közös alkalmazásfejlécekhez.

Amikor a fejlécet név szerint elérjük a Térkép, MultiValueMap vagy a HttpHeaders tárgy, kapunk egy nulla ha nincs jelen.

3. @ RequestHeader Attribútumok

Most, hogy áttekintettük a kérésfejlécek elérésének alapjait a @ RequestHeader annotáció, nézzük meg közelebbről az attribútumait.

Már használtuk a név vagy érték attribútumokat hallgatólagosan, amikor kifejezetten megneveztük a fejlécünket:

nyilvános ResponseEntity üdvözlet (@RequestHeader ("accept-language") karakterlánc) {}

Ugyanezt el tudjuk érni a név tulajdonság:

public ResponseEntity üdvözlet (@RequestHeader (név = "accept-language") Karakterlánc) {}

Ezután használjuk a érték pontosan ugyanúgy attribútum:

public ResponseEntity üdvözlet (@RequestHeader (value = "accept-language") Karakterlánc) {}

Ha konkrétan fejlécet nevezünk meg, akkor a fejléc alapértelmezés szerint kötelező. Ha a fejléc nem található a kérésben, a vezérlő 400 hibát ad vissza.

Használjuk a kívánt attribútum jelzi, hogy a fejlécünkre nincs szükség:

@GetMapping ("/ nonRequiredHeader") public ResponseEntity assessmentNonRequiredHeader (@RequestHeader (value = "optional-header", required = false) String optionalHeader) {return new ResponseEntity (String.format ("Volt-e választható fejléc?% S!" , (választhatóHeader == null? "Nem": "Igen")), HttpStatus.OK); }

Mivel változónk az lesz nulla ha a fejléc nincs a kérésben, biztosnak kell lennünk abban, hogy megtesszük a megfelelőt nulla ellenőrzése.

Használjuk a alapértelmezett érték attribútum a fejléc alapértelmezett értékének megadásához:

@GetMapping ("/ default") public ResponseEntity assessmentDefaultHeaderValue (@RequestHeader (value = "optional-header", defaultValue = "3600") int optionalHeader) {return new ResponseEntity (String.format ("Opcionális fejléc% d", opcionálisHeader ), HttpStatus.OK); }

4. Következtetés

Ebben a rövid bemutatóban megtanultuk, hogyan férhetünk hozzá a Spring REST vezérlők kérésfejlécéhez. Először a @ RequestHeader jelölés a kérési fejlécek megadásához a vezérlő módszereinkhez.

Az alapok áttekintése után részletesen megvizsgáltuk a @ RequestHeader annotáció.

A példa kód elérhető a GitHubon.