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.