Spring @RequestParam Annotatie

1. Overzicht

In deze korte tutorial gaan we de lente verkennen @RequestParam annotatie en zijn attributen.

Simpel gezegd, we kunnen gebruiken @RequestParam om queryparameters, formulierparameters en zelfs bestanden uit het verzoek te extraheren.

2. Een eenvoudige kaart

Laten we zeggen dat we een eindpunt hebben / api / foos waaraan een queryparameter moet voldoen met de naam ID kaart:

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

In dit voorbeeld hebben we @RequestParam om het ID kaart queryparameter.

Een eenvoudig GET-verzoek zou aanroepen getFoos:

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

De volgende, laten we eens kijken naar de kenmerken van de annotatie: naam, waarde, verplicht, en standaardwaarde.

3. Specificeer de naam van de verzoekparameter

In het vorige voorbeeld zijn zowel de variabelenaam als de parameternaam hetzelfde.

Soms willen we echter dat deze anders zijn. Of, als we Spring Boot niet gebruiken, moeten we mogelijk een speciale compilatietijdconfiguratie uitvoeren of de parameternamen zullen niet echt in de bytecode staan.

Gelukkig, we kunnen de @RequestParam naam met behulp van de naam attribuut:

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

We kunnen ook doen @RequestParam (waarde = "id") of gewoon @RequestParam ("id").

4. Optionele verzoekparameters

Methode parameters geannoteerd met @RequestParam zijn standaard vereist.

Dit betekent dat als de parameter niet aanwezig is in het verzoek, we een foutmelding krijgen:

GET / api / foos HTTP / 1.1 ----- 400 Bad Request Required Stringparameter 'id' is niet aanwezig

We kunnen onze @RequestParam optioneel te zijn met de verplicht attribuut:

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

In dit geval beide:

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

en

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

zal de methode correct aanroepen.

Als de parameter niet is opgegeven, is de method-parameter gebonden aan nul.

4.1. Java 8 gebruiken Optioneel

Als alternatief kunnen we de parameter inpakken Optioneel:

@GetMapping ("/ api / foos") @ResponseBody openbare String getFoos (@RequestParam Optionele id) {return "ID:" + id.orElseGet (() -> "niet opgegeven"); }

In dit geval, we hoeven de verplicht attribuut.

En de standaardwaarde wordt gebruikt als de verzoekparameter niet is opgegeven:

// localhost: 8080 / api / foos ---- ID: niet opgegeven

5. Een standaardwaarde voor de verzoekparameter

We kunnen ook een standaardwaarde instellen op de @RequestParam door de standaardwaarde attribuut:

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

Dit is zoals required = false, in dat de gebruiker niet langer de parameter hoeft op te geven:

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

Hoewel we het nog steeds kunnen verstrekken:

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

Merk op dat wanneer we de standaardwaarde attribuut, verplicht is inderdaad ingesteld op false.

6. Alle parameters in kaart brengen

We kunnen ook meerdere parameters hebben zonder hun namen te definiëren of tel door gewoon een Kaart:

@PostMapping ("/ api / foos") @ResponseBody openbare String updateFoos (@RequestParam Map allParams) {return "Parameters zijn" + allParams.entrySet (); }

die vervolgens alle verzonden parameters weergeeft:

curl -X POST -F 'name = abc' -F 'id = 123' // localhost: 8080 / api / foos ----- Parameters zijn {[name = abc], [id = 123]}

7. Een parameter met meerdere waarden in kaart brengen

Een @RequestParam kan meerdere waarden hebben:

@GetMapping ("/ api / foos") @ResponseBody openbare String getFoos (@RequestParam Lijst-id) {return "ID's zijn" + id; }

En Spring MVC wijst een door komma's gescheiden ID kaart parameter:

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

of een lijst met afzonderlijke ID kaart parameters:

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

8. Conclusie

In dit artikel hebben we geleerd hoe u @RequestParam.

De volledige broncode voor de voorbeelden is te vinden in het GitHub-project.