Ako nastaviť hlavičku na odpoveď s jarou 5

1. Prehľad

V tomto rýchlom návode prejdeme rôznymi spôsobmi nastavenia hlavičky na odpoveď služby, buď pre nereaktívne koncové body, alebo pre API využívajúce rámec Spring's 5 WebFlux.

Ďalšie informácie o tomto rámci môžeme nájsť v predchádzajúcich príspevkoch.

2. Hlavičky pre nereaktívne zložky

Ak chceme nastaviť hlavičky na jednotlivé odpovede, môžeme ich použiť HttpServletResponse alebo ResponseEntity predmety.

Na druhej strane, ak je naším cieľom pridať filter na všetky alebo viac odpovedí, budeme musieť nakonfigurovať a Filtrovať.

2.1. Použitím HttpServletResponse

Musíme jednoducho pridať HttpServletResponse namietajte proti nášmu koncovému bodu REST ako argument, potom použite addHeader () metóda:

@GetMapping ("/ http-servlet-response") verejný reťazec usingHttpServletResponse (HttpServletResponse response) {response.addHeader ("Baeldung-Example-Header", "Value-HttpServletResponse"); návrat "Odpoveď s hlavičkou pomocou HttpServletResponse"; }

Ako je uvedené v príklade, nemusíme vracať objekt odpovede.

2.2. Použitím ResponseEntity

V takom prípade použijeme Kulturista poskytuje ResponseEntity trieda:

@GetMapping ("/ response-entity-builder-s-http-hlavičkami") public ResponseEntity usingResponseEntityBuilderAndHttpHeaders () {HttpHeaders responseHeaders = nový HttpHeaders (); responseHeaders.set ("Baeldung-Example-Header", "Value-ResponseEntityBuilderWithHttpHeaders"); return ResponseEntity.ok () .headers (responseHeaders) .body ("Odpoveď s hlavičkou pomocou ResponseEntity"); }

The HttpHeaders trieda ponúka množstvo pohodlných metód na nastavenie najbežnejších hlavičiek.

Viac príkladov ilustrujúcich tieto body si môžeme pozrieť v našom repozitári Github.

2.3. Pridanie hlavičky pre všetky odpovede

Teraz si predstavme, že chceme nastaviť konkrétnu hlavičku pre mnoho našich koncových bodov.

Bolo by samozrejme frustrujúce, keby sme pri každej metóde mapovania museli replikovať predchádzajúci kód.

Lepší prístup k dosiahnutiu tohto cieľa je konfigurácia a Filtrovať v našej službe:

@WebFilter ("/ filter-response-header / *") verejná trieda AddResponseHeaderFilter implementuje filter {@Override public void doFilter (požiadavka ServletRequest, odpoveď ServletResponse, reťazec FilterChain) hodí IOException, ServletException {HttpServletResponse httpServletResponse httpServletResponse httpServletResponse.setHeader ("Baeldung-Example-Filter-Header", "Value-Filter"); chain.doFilter (požiadavka, odpoveď); } @Override public void init (FilterConfig filterConfig) vyvolá ServletException {// ...} @Override public void destru () {// ...}}

The @WebFilter anotácia nám umožňuje označiť urlVzory pre ktoré toto Filtrovať nadobudnú účinnosť.

Ako sme už zdôraznili v tomto článku, aby sa naše Filtrovať objaviteľné na jar, musíme pridať @ServletComponentScan anotácia k našej triede Spring Application:

@ServletComponentScan @SpringBootApplication verejná trieda ResponseHeadersApplication {public static void main (String [] args) {SpringApplication.run (ResponseHeadersApplication.class, args); }}

Tomuto poslednému kroku sa môžeme vyhnúť, ak nepotrebujeme žiadnu z funkcií poskytovaných serverom @WebFilterpomocou @ Komponent anotácia v našom Filtrovať triedy namiesto toho.

3. Hlavičky pre reaktívne koncové body

Opäť uvidíme, ako nastaviť hlavičky na odpovede jedného koncového bodu pomocou ServerHttpResponse, ResponseEntity alebo ServerResponse (pre funkčné koncové body) triedy a rozhrania.

Dozvieme sa tiež, ako implementovať jar 5 WebFilter pridať hlavičku ku všetkým našim odpovediam.

3.1. Použitím ServerHttpResponse

Tento prístup je dosť podobný prístupu HttpServletResponse náprotivok:

@GetMapping ("/ server-http-response") verejné Mono usingServerHttpResponse (odpoveď ServerHttpResponse) {response.getHeaders (). Add ("Baeldung-hlavička príkladu", "hodnota-serverHttpResponse"); return Mono.just ("Odpoveď s hlavičkou pomocou ServerHttpResponse"); }

3.2. Použitím ResponseEntity

Môžeme použiť ResponseEntity triedy presne tak, ako to robíme pre nereaktívne koncové body:

@GetMapping ("/ response-entity") verejné Mono usingResponseEntityBuilder () {String responseHeaderKey = "Baeldung-Example-Header"; Reťazec responseHeaderValue = "Value-ResponseEntityBuilder"; String responseBody = "Odpoveď s hlavičkou pomocou ResponseEntity (staviteľ)"; návrat Mono.just (ResponseEntity.ok () .header (responseHeaderKey, responseHeaderValue) .body (responseBody)); }

3.3. Použitím ServerResponse

Triedy a rozhrania zavedené v posledných dvoch pododdieloch je možné použiť v @ Kontrolór triedy s poznámkami, ale nie sú vhodné pre nový funkčný webový rámec Spring 5.

Ak chceme nastaviť hlavičku na a HandlerFunction potom sa budeme musieť dostať do rúk ServerResponserozhranie:

public Mono useHandler (konečná požiadavka ServerRequest) {návrat ServerResponse.ok () .header ("Baeldung-Example-Header", "Value-Handler") .body (Mono.just ("Odpoveď s hlavičkou pomocou Handlera"), reťazec. trieda); }

3.4. Pridanie hlavičky pre všetky odpovede

Nakoniec Jar 5 poskytuje a WebFilter rozhranienastaviť hlavičku na všetky odpovede načítané službou:

@ Verejná trieda komponentu AddResponseHeaderWebFilter implementuje WebFilter {@Override verejný Mono filter (výmena ServerWebExchange, reťazec WebFilterChain) {exchange.getResponse () .getHeaders () .add ("Baeldung-Example-Filter-Header", "Value-Filter"); spätný reťaz.filtre (výmena); }}

4. Záver

Na záver sme sa naučili mnoho rôznych spôsobov nastavenia hlavičky odpovede, či už ju chceme nastaviť na jeden koncový bod, alebo ak chceme nakonfigurovať všetky naše ostatné rozhrania API, aj keď migrujeme na reaktívny zásobník , teraz máme vedomosti, aby sme mohli robiť všetky tieto veci.

Ako vždy, všetky príklady sú prístupné v našom úložisku Github, nereaktívne aj tie, ktoré využívajú špecifickú funkčnosť Spring 5.


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