Hogyan állítsunk fejlécet egy válaszra az 5. tavasszal

1. Áttekintés

Ebben a gyors bemutatóban a fejléc beállításának különböző módjain megyünk keresztül a szolgáltatás válaszán, vagy nem reaktív végpontokhoz, vagy API-khoz, amelyek a Spring 5 WebFlux keretrendszerét használják.

A keretrendszerről további információkat találhatunk korábbi bejegyzéseiben.

2. A nem reaktív alkatrészek fejlécei

Ha fejléceket akarunk beállítani egyetlen válaszra, használhatjuk HttpServletResponse vagy ResponseEntity tárgyakat.

Másrészt, ha célunk az, hogy szűrőt adjunk az összes vagy több válaszhoz, akkor be kell állítanunk a Szűrő.

2.1. Használata HttpServletResponse

Egyszerűen hozzá kell adnunk a HttpServletResponse kifogásolja a REST végpontunkat argumentumként, majd használja a addHeader () módszer:

@GetMapping ("/ http-servlet-response") public String usingHttpServletResponse (HttpServletResponse response) {response.addHeader ("Baeldung-Example-Header", "Value-HttpServletResponse"); return "Válasz fejléccel a HttpServletResponse használatával"; }

Amint az a példában látható, nem kell visszaadnunk a válaszobjektumot.

2.2. Használata ResponseEntity

Ebben az esetben használjuk a Testépítő a ResponseEntity osztály:

@GetMapping ("/ response-entity-builder-with-http-headers") public ResponseEntity usingResponseEntityBuilderAndHttpHeaders () {HttpHeaders responseHeaders = new HttpHeaders (); responseHeaders.set ("Baeldung-Example-Header", "Value-ResponseEntityBuilderWithHttpHeaders"); return a ResponseEntity.ok () .headers (responseHeaders) .body ("Válasz fejléccel a ResponseEntity használatával"); }

A HttpHeaders osztály rengeteg kényelmi módszert kínál a leggyakoribb fejlécek beállításához.

További példákat láthatunk ezekről a pontokról a Github repóban.

2.3. Fejléc hozzáadása az összes válaszhoz

Most képzeljük el, hogy egy bizonyos fejlécet szeretnénk beállítani számos végpontunkhoz.

Természetesen frusztráló lenne, ha minden egyes leképezési módszerhez meg kell ismételnünk az előző kódot.

Jobb megközelítés ennek megvalósításához: konfigurálása a Szűrő szolgálatunkban:

A @WebFilter ("/ filter-response-header / *") public class AddResponseHeaderFilter implementálja a Filter {@Override public void doFilter (ServletRequest kérés, ServletResponse válasz, FilterChain lánc) IOException, ServletException {HttpServletResponse; HettpServletResponse; httpServletResponse.setHeader ("Baeldung-Example-Filter-Header", "Value-Filter"); chain.doFilter (kérés, válasz); } @Orride public void init (FilterConfig filterConfig) dob ServletException {// ...} @Orride public void destr () {// ...}}

A @WebFilter annotáció lehetővé teszi számunkra a urlPatterns amiért ez Szűrő hatékonnyá válik.

Amint ebben a cikkben rámutattunk, annak érdekében, hogy a mi Szűrő tavaszig felfedezhetővé kell tennünk a @ServletComponentScan kommentár a Tavaszi Alkalmazás osztályunkhoz:

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

Ezt az utolsó lépést elkerülhetjük, ha nincs szükségünk a szolgáltatás által biztosított bármelyikre @WebFilter, a @Összetevő annotáció a mi Szűrő osztály helyett.

3. A reaktív végpontok fejlécei

Ismét meglátjuk, hogyan állíthatunk fejléceket az egyetlen végpont válaszaira ServerHttpResponse, ResponseEntity vagy ServerResponse (funkcionális végpontokhoz) osztályok és interfészek.

Megtanuljuk azt is, hogyan kell megvalósítani az 5. tavaszt WebFilter hogy fejleményt adjunk az összes válaszunkhoz.

3.1. Használata ServerHttpResponse

Ez a megközelítés meglehetősen hasonló a HttpServletResponse megfelelője:

@GetMapping ("/ server-http-response") nyilvános mono usingServerHttpResponse (ServerHttpResponse response) {response.getHeaders (). Add ("Baeldung-Example-Header", "Value-ServerHttpResponse"); return Mono.just ("Válasz fejléccel a ServerHttpResponse használatával"); }

3.2. Használata ResponseEntity

Használhatjuk a ResponseEntity osztály pontosan úgy, mint a nem reaktív végpontok esetében:

@GetMapping ("/ response-entitás") nyilvános Mono usingResponseEntityBuilder () {String responseHeaderKey = "Baeldung-Example-Header"; String responseHeaderValue = "Value-ResponseEntityBuilder"; String responseBody = "Válasz fejléccel a ResponseEntity (builder) használatával"; return Mono.just (ResponseEntity.ok () .header (responseHeaderKey, responseHeaderValue) .body (responseBody)); }

3.3. Használata ServerResponse

Az utolsó két alszakaszban bevezetett osztályok és interfészek használhatók @Vezérlő jegyzetekkel ellátott osztályok, de nem alkalmasak az új Spring 5 funkcionális webkeretre.

Ha akarjuk hogy fejlécet állítson be a HandlerFunction akkor a kezünkbe kell vennünk a ServerResponsefelület:

public Mono useHandler (végső ServerRequest kérés) {return ServerResponse.ok () .header ("Baeldung-Example-Header", "Value-Handler") .body (Mono.just ("Válasz fejléccel Handler használatával"), String. osztály); }

3.4. Fejléc hozzáadása az összes válaszhoz

Végül, Az 5. tavasz a WebFilter felülethogy fejlécet állítson be az összes válaszra egy szolgáltatás által letöltve:

@Component public class AddResponseHeaderWebFilter WebFilter {@Override public Mono filter (ServerWebExchange exchange, WebFilterChain chain) {exchange.getResponse () .getHeaders () .add ("Baeldung-Example-Filter-Header", "Value-Filter"); visszatérő lánc.szűrő (csere); }}

4. Következtetés

Összefoglalva: sokféle módszert tanultunk a fejléc beállítására a válaszban, akár egyetlen végpontra szeretnénk állítani, akár az összes többi API-t konfigurálni, még akkor is, ha a reaktív verembe állunk , most már tudással rendelkezünk mindezen dolgok elvégzéséhez.

Mint mindig, a Github adattárunkban az összes példa elérhető, mind a nem reaktívak, mind azok, amelyek a Spring 5 specifikus funkcióit használják.


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