Hvordan sette en topptekst på et svar med våren 5

1. Oversikt

I denne raske opplæringen, Vi går gjennom forskjellige måter å sette en overskrift på en tjenestesvar, enten for ikke-reaktive endepunkter eller for API-er som bruker Spring's 5 WebFlux framework.

Vi kan finne ytterligere informasjon om dette rammeverket i tidligere innlegg.

2. Overskrifter for ikke-reaktive komponenter

Hvis vi ønsker å sette overskrifter på enkeltsvar, kan vi bruke HttpServletResponse eller ResponseEntity gjenstander.

På den annen side, hvis vårt mål er å legge til et filter til alle eller flere svar, må vi konfigurere en Filter.

2.1. Ved hjelp av HttpServletResponse

Vi må bare legge til HttpServletResponse motsette seg vårt REST-endepunkt som argument, og bruk deretter addHeader () metode:

@GetMapping ("/ http-servlet-response") offentlig streng ved hjelp avHttpServletResponse (HttpServletResponse respons) {respons.addHeader ("Baeldung-eksempel-header", "Verdi-HttpServletResponse"); returner "Svar med topptekst ved hjelp av HttpServletResponse"; }

Som vist i eksemplet, trenger vi ikke å returnere svarobjektet.

2.2. Ved hjelp av ResponseEntity

I dette tilfellet, la oss bruke BodyBuilder levert av ResponseEntity klasse:

@GetMapping ("/ response-entity-builder-with-http-headers") public ResponseEntity usingResponseEntityBuilderAndHttpHeaders () {HttpHeaders responseHeaders = new HttpHeaders (); responseHeaders.set ("Baeldung-eksempel-header", "Value-ResponseEntityBuilderWithHttpHeaders"); return ResponseEntity.ok () .headers (responseHeaders) .body ("Svar med topptekst ved bruk av ResponseEntity"); }

De HttpHeaders klasse tilbyr mange praktiske metoder for å angi de vanligste overskriftene.

Vi kan se flere eksempler som illustrerer disse punktene i Github-repoen.

2.3. Legge til en overskrift for alle svar

La oss forestille oss at vi vil sette en bestemt topptekst til mange av våre sluttpunkter.

Selvfølgelig vil det være frustrerende hvis vi må replikere den forrige koden på hver kartleggingsmetode.

En bedre tilnærming for å oppnå dette er av konfigurere en Filter i vår tjeneste:

@WebFilter ("/ filter-response-header / *") offentlig klasse AddResponseHeaderFilter implementerer filter {@Override public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) kaster IOException, ServletException {HttpServletResponse httpServletResponse; httpServletResponse.setHeader ("Baeldung-eksempel-filter-overskrift", "Verdifilter"); chain.doFilter (forespørsel, svar); } @Override public void init (FilterConfig filterConfig) kaster ServletException {// ...} @Override public void destroy () {// ...}}

De @WebFilter kommentar tillater oss å indikere urlMønstre som dette Filter vil bli effektiv.

Som vi har påpekt i denne artikkelen, for å gjøre vårt Filter som kan oppdages av våren, må vi legge til @ServletComponentScan kommentar til vår vårapplikasjonsklasse:

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

Vi kan unngå dette siste trinnet hvis vi ikke trenger noen av funksjonene som tilbys av @WebFilter, ved å bruke @Komponent kommentar i vår Filter klasse i stedet.

3. Overskrifter for reaktive endepunkter

Igjen, vi får se hvordan du setter overskrifter på svar på enkelt endepunkter ved hjelp av ServerHttpResponse, ResponseEntity eller Serverrespons (for funksjonelle endepunkter) klasser og grensesnitt.

Vi lærer også hvordan du implementerer en Spring 5 WebFilter for å legge til en overskrift på alle svarene våre.

3.1. Ved hjelp av ServerHttpResponse

Denne tilnærmingen er ganske lik HttpServletResponse motpart:

@GetMapping ("/ server-http-respons") offentlig mono ved hjelp av ServerHttpResponse (ServerHttpResponse respons) {respons.getHeaders (). Legg til ("Baeldung-eksempel-header", "Value-ServerHttpResponse"); returner Mono.just ("Svar med topptekst ved hjelp av ServerHttpResponse"); }

3.2. Ved hjelp av ResponseEntity

Vi kan bruke ResponseEntity klasse nøyaktig som vi gjør for ikke-reaktive endepunkter:

@GetMapping ("/ response-entity") offentlig mono usingResponseEntityBuilder () {String responseHeaderKey = "Baeldung-eksempel-header"; String responseHeaderValue = "Value-ResponseEntityBuilder"; String responseBody = "Svar med topptekst ved hjelp av ResponseEntity (builder)"; returner Mono.just (ResponseEntity.ok () .header (responseHeaderKey, responseHeaderValue) .body (responseBody)); }

3.3. Ved hjelp av Serverrespons

Klassene og grensesnittene som er introdusert i de to siste underavsnittene kan brukes i @Kontrollør merkede klasser, men er ikke egnet for det nye Spring 5 Functional Web Framework.

Hvis vi vil å sette en overskrift på en HandlerFunction da må vi få tak i Serverresponsgrensesnitt:

offentlig mono useHandler (endelig ServerRequest-forespørsel) {return ServerResponse.ok () .header ("Baeldung-Example-Header", "Value-Handler") .body (Mono.just ("Response with header using Handler"), String. klasse); }

3.4. Legge til en overskrift for alle svar

Til slutt, Våren 5 gir en WebFilter grensesnittfor å sette en overskrift på alle svarene hentet av en tjeneste:

@Komponent offentlig klasse AddResponseHeaderWebFilter implementerer WebFilter {@Override public Mono filter (ServerWebExchange exchange, WebFilterChain chain) {exchange.getResponse () .getHeaders () .add ("Baeldung-eksempel-filter-header", "Value-Filter"); retur chain.filter (bytte); }}

4. Konklusjon

Avslutningsvis har vi lært mange forskjellige måter å sette en overskrift på et svar, enten hvis vi vil sette det på et enkelt endepunkt, eller hvis vi vil konfigurere alle våre API-er, selv om vi migrerer til den reaktive stakken , nå har vi kunnskapen til å gjøre alle disse tingene.

Som alltid kan du få tilgang til alle eksemplene i vårt Github-lager, både de ikke-reaktive og de som bruker Spring 5-spesifikke funksjonalitet.


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