Vår @ RequestParam-kommentar

1. Oversikt

I denne raske opplæringen vil vi utforske vårens @RequestParam kommentar og dens attributter.

Enkelt sagt, vi kan bruke @RequestParam for å trekke ut søkeparametere, skjemaparametere og til og med filer fra forespørselen.

2. En enkel kartlegging

La oss si at vi har et endepunkt / api / foos som tar en spørringsparameter kalt id:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam String id) {return "ID:" + id; }

I dette eksemplet brukte vi @RequestParam å trekke ut id spørringsparameter.

En enkel GET-forespørsel vil påberope seg getFoos:

// localhost: 8080 / api / foos? id = abc ---- ID: abc

Neste, la oss ta en titt på merknadens attributter: Navn, verdi, kreves, og standardverdi.

3. Spesifisere forespørselsparameternavnet

I forrige eksempel er både variabelnavnet og parameternavnet det samme.

Noen ganger vil vi at disse skal være forskjellige. Eller hvis vi ikke bruker Spring Boot, kan det hende vi trenger å gjøre en spesiell kompileringstidskonfigurasjon, ellers vil parameternavnene ikke være i bytekoden.

Heldigvis, vi kan konfigurere @RequestParam navnet ved hjelp av Navn Egenskap:

@PostMapping ("/ api / foos") @ResponseBody public String addFoo (@RequestParam (name = "id") String fooId, @RequestParam String name) {return "ID:" + fooId + "Name:" + name; }

Vi kan også gjøre det @RequestParam (verdi = “id”) eller bare @RequestParam (“id”).

4. Valgfrie forespørselsparametere

Metodeparametere kommentert med @RequestParam kreves som standard.

Dette betyr at hvis parameteren ikke er til stede i forespørselen, får vi en feil:

GET / api / foos HTTP / 1.1 ----- 400 Dårlig forespørsel påkrevd Strengparameter 'id' er ikke til stede

Vi kan konfigurere våre @RequestParam å være valgfri, skjønt, med kreves Egenskap:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam (required = false) Streng-id) {return "ID:" + id; }

I dette tilfellet begge deler:

// localhost: 8080 / api / foos? id = abc ---- ID: abc

og

// localhost: 8080 / api / foos ---- ID: null

vil påkalle metoden riktig.

Når parameteren ikke er spesifisert, er metodeparameteren bundet til null.

4.1. Bruke Java 8 Valgfri

Alternativt kan vi pakke inn parameteren Valgfri:

@GetMapping ("/ api / foos") @ ResponseBody public String getFoos (@RequestParam Valgfri id) {return "ID:" + id.orElseGet (() -> "ikke gitt"); }

I dette tilfellet, vi trenger ikke å spesifisere kreves Egenskap.

Og standardverdien vil bli brukt hvis forespørselsparameteren ikke er gitt:

// localhost: 8080 / api / foos ---- ID: ikke oppgitt

5. En standardverdi for forespørselsparameteren

Vi kan også sette en standardverdi til @RequestParam ved å bruke standardverdi Egenskap:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam (defaultValue = "test") Streng-id) {return "ID:" + id; }

Dette er som påkrevd = falsk, ved at brukeren ikke lenger trenger å levere parameteren:

// localhost: 8080 / api / foos ---- ID: test

Selv om det fortsatt er greit å gi det:

// localhost: 8080 / api / foos? id = abc ---- ID: abc

Merk at når vi stiller inn standardverdi Egenskap, kreves er faktisk satt til falsk.

6. Kartlegge alle parametere

Vi kan også ha flere parametere uten å definere navnene deres eller tell ved å bare bruke en Kart:

@PostMapping ("/ api / foos") @ResponseBody public String updateFoos (@RequestParam Map allParams) {return "Parametrene er" + allParams.entrySet (); }

som deretter reflekterer alle sendte parametere:

krøll -X POST -F 'navn = abc' -F 'id = 123' // localhost: 8080 / api / foos ----- Parameterne er {[name = abc], [id = 123]}

7. Kartlegge en flerverdiparameter

En eneste @RequestParam kan ha flere verdier:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam List id) {return "ID er" + id; }

Og Spring MVC vil kartlegge en kommaseparert id parameter:

// localhost: 8080 / api / foos? id = 1,2,3 ---- ID er [1,2,3]

eller en liste over separate id parametere:

// localhost: 8080 / api / foos? id = 1 & id = 2 ---- ID er [1,2]

8. Konklusjon

I denne artikkelen lærte vi å bruke @RequestParam.

Den fulle kildekoden for eksemplene finner du i GitHub-prosjektet.


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