Tavaszi @RequestParam kommentár

1. Áttekintés

Ebben a gyors bemutatóban felfedezzük a tavaszit @RequestParam annotáció és attribútumai.

Egyszerűen fogalmazva, használhatjuk @RequestParam lekérdezési paraméterek, űrlapparaméterek, sőt fájlok kibontása a kérésből.

2. Egyszerű leképezés

Tegyük fel, hogy van egy végpontunk / api / foos nevű lekérdezési paramétert vesz fel id:

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

Ebben a példában használtuk @RequestParam hogy kivonja a id lekérdezési paraméter.

Egy egyszerű GET kérés hivatkozik getFoos:

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

Következő, nézzük meg az annotáció attribútumait: név, érték, kívánt, és alapértelmezett érték.

3. A Request Parameter Name megadása

Az előző példában a változó neve és a paraméter neve is megegyezik.

Néha azt akarjuk, hogy ezek eltérjenek. Vagy ha nem a Spring Boot programot használjuk, akkor lehet, hogy speciális fordítási idejű konfigurációt kell végrehajtanunk, különben a paraméterek neve valójában nem lesz a bájtkódban.

Szerencsére, konfigurálhatjuk a @RequestParam nevet a név tulajdonság:

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

Megtehetjük azt is @RequestParam (érték = „id”) vagy csak @RequestParam („id”).

4. Opcionális kérési paraméterek

A módszer paraméterei a következőkkel vannak kiegészítve @RequestParam alapértelmezés szerint szükségesek.

Ez azt jelenti, hogy ha a paraméter nem szerepel a kérésben, akkor hibaüzenetet kapunk:

GET / api / foos HTTP / 1.1 ----- 400 Hibás kérés szükséges Szükséges karakterlánc-paraméter nem található

Konfigurálhatjuk @RequestParam opcionális, bár a kívánt tulajdonság:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam (kötelező = hamis) String id) {return "ID:" + id; }

Ebben az esetben mindkettő:

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

és

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

helyesen fogja meghívni a módszert.

Ha a paraméter nincs megadva, akkor a metódus paraméterhez lesz kötve nulla.

4.1. Java 8 használata Választható

Alternatív megoldásként bepakolhatjuk a paramétert Választható:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam Opcionális azonosító) {return "ID:" + id.orElseGet (() -> "nincs megadva"); }

Ebben az esetben, nem kell megadnunk a kívánt tulajdonság.

És az alapértelmezett értéket használjuk, ha a kérés paramétert nem adjuk meg:

// localhost: 8080 / api / foos ---- ID: nincs megadva

5. A Request Parameter alapértelmezett értéke

Alapértelmezett értéket is beállíthatunk a @RequestParam a alapértelmezett érték tulajdonság:

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

Ez olyan, mint kötelező = hamis, annyiban, hogy a felhasználónak már nem kell megadnia a paramétert:

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

Bár továbbra is rendben vagyunk, hogy megadjuk:

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

Vegye figyelembe, hogy amikor beállítjuk a alapértelmezett érték tulajdonság, kívánt valóban beállítva van hamis.

6. Az összes paraméter feltérképezése

Több paraméterünk is lehet, anélkül, hogy meghatároznánk a nevüket vagy csak az a használatával számoljon Térkép:

@PostMapping ("/ api / foos") @ResponseBody public String updateFoos (@RequestParam Map allParams) {return "A paraméterek" + allParams.entrySet (); }

amely visszatükrözi az elküldött paramétereket:

curl -X POST -F 'név = abc' -F 'id = 123' // localhost: 8080 / api / foos ----- A paraméterek {[név = abc], [id = 123]}

7. Többértékű paraméter leképezése

Egyetlen @RequestParam több értéke lehet:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam List id) {return "Azonosítók vannak" + id; }

A Spring MVC pedig vesszővel elválasztott térképet fog feltérképezni id paraméter:

// localhost: 8080 / api / foos? id = 1,2,3 ---- Azonosító: [1,2,3]

vagy különállóak listája id paraméterek:

// localhost: 8080 / api / foos? id = 1 & id = 2 ---- Azonosítók [1,2]

8. Következtetés

Ebben a cikkben megtanultuk a használatát @RequestParam.

A példák teljes forráskódja a GitHub projektben található.