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.