Forår @ RequestParam-kommentar

1. Oversigt

I denne hurtige vejledning undersøger vi forårets @RequestParam kommentar og dets attributter.

Kort sagt, vi kan bruge @RequestParam at udtrække forespørgselsparametre, formularparametre og endda filer fra anmodningen.

2. En simpel kortlægning

Lad os sige, at vi har et slutpunkt / api / foos der tager en forespørgselsparameter kaldet id:

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

I dette eksempel brugte vi @RequestParam at udtrække id forespørgselsparameter.

En simpel GET-anmodning påberåber sig getFoos:

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

Næste, lad os se på annotationens attributter: navn, værdi, krævetog standard værdi.

3. Angivelse af anmodningsparameternavnet

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

Nogle gange vil vi dog have, at disse skal være forskellige. Eller hvis vi ikke bruger Spring Boot, skal vi muligvis udføre en speciel kompileringstidskonfiguration, ellers vil parameternavne faktisk ikke være i bytekoden.

Heldigvis, vi kan konfigurere @RequestParam navn ved hjælp af navn attribut:

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

Vi kan også gøre @RequestParam (værdi = “id”) eller bare @RequestParam (“id”).

4. Valgfri anmodningsparametre

Metodeparametre kommenteret med @RequestParam kræves som standard.

Dette betyder, at hvis parameteren ikke er til stede i anmodningen, får vi en fejl:

GET / api / foos HTTP / 1.1 ----- 400 Dårlig anmodning krævet Strengparameter 'id' er ikke til stede

Vi kan konfigurere vores @RequestParam at være valgfri, dog med krævet attribut:

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

I dette tilfælde begge:

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

og

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

vil påkalde metoden korrekt.

Når parameteren ikke er angivet, er metodeparameteren bundet til nul.

4.1. Brug af Java 8 Valgfri

Alternativt kan vi indpakke parameteren i Valgfri:

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

I dette tilfælde, vi behøver ikke at specificere krævet attribut.

Og standardværdien bruges, hvis anmodningsparameteren ikke er angivet:

// localhost: 8080 / api / foos ---- ID: medfølger ikke

5. En standardværdi for anmodningsparameteren

Vi kan også indstille en standardværdi til @RequestParam ved hjælp af standard værdi attribut:

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

Dette er ligesom krævet = falsk, ved at brugeren ikke længere behøver at levere parameteren:

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

Selvom det stadig er okay at give det:

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

Bemærk, at når vi indstiller standard værdi attribut, krævet er faktisk indstillet til falsk.

6. Kortlægning af alle parametre

Vi kan også have flere parametre uden at definere deres navne eller tæl ved bare at bruge en Kort:

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

som derefter reflekterer alle sendte parametre:

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

7. Kortlægning af en multiværdiparameter

En enkelt @RequestParam kan have flere værdier:

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

Og Spring MVC vil kortlægge et komma-afgrænset id parameter:

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

eller en liste over separate id parametre:

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

8. Konklusion

I denne artikel lærte vi at bruge @RequestParam.

Den fulde kildekode til eksemplerne findes i GitHub-projektet.


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