Tavaszi MVC tartalmi tárgyalás

1. Áttekintés

Ez a cikk leírja, hogyan lehet megvalósítani a tartalmi egyeztetéseket egy tavaszi MVC-projektben.

Általában három lehetőség van a kérelem adathordozó-típusának meghatározására:

  • URL-utótagok (kiterjesztések) használata a kérésben (pl .xml / .json)
  • URL-paraméter használata a kérésben (pl ? format = json)
  • Használata Elfogad fejléc a kérésben

Alapértelmezés szerint ez a sorrend, amelyben a tavaszi tartalomtárgyalás menedzsere megpróbálja használni ezt a három stratégiát. És ha ezek egyike sem engedélyezett, megadhatunk egy tartalékot egy alapértelmezett tartalomtípusra.

2. Tartalmi tárgyalási stratégiák

Kezdjük a szükséges függőségekkel - JSON és XML reprezentációkkal dolgozunk, ezért ebben a cikkben a Jacksont használjuk a JSON-hoz:

 com.fasterxml.jackson.core jackson-core 2.10.2 com.fasterxml.jackson.core jackson-databaseind ​​2.10.2 

XML támogatáshoz használhatjuk a JAXB, az XStream vagy az újabb Jackson-XML támogatást.

Mivel elmagyaráztuk a Elfogad fejléc egy korábbi cikkében HttpMessageConverter, koncentráljunk az első két stratégiára.

3. Az URL utótag stratégia

Alapértelmezés szerint ez a stratégia le van tiltva, de a keretrendszer a kimeneti tartalom típusának meghatározásához közvetlenül az URL-től ellenőrizheti az elérési utat.

Mielőtt belekezdenénk a konfigurációkba, nézzünk meg gyorsan egy példát. A következő egyszerű API-módszer megvalósítása van egy tipikus tavaszi vezérlőben:

@RequestMapping (érték = "/ alkalmazott / {id}", = = "alkalmazás / json", "alkalmazás / xml"}, módszer = RequestMethod.GET) public @ResponseBody alkalmazott getEmployeeById (@PathVariable hosszú azonosító) {return workerMap .get (id); } 

Hívjuk meg a JSON kiterjesztés használatával az erőforrás média típusának megadásához:

curl //localhost:8080/spring-mvc-basics/employee/10.json

Íme, mit kaphatunk vissza, ha JSON kiterjesztést használunk:

{"id": 10, "name": "Test Employee", "contactNumber": "999-999-9999"}

És így fog kinézni a kérés-válasz az XML használatával:

curl //localhost:8080/spring-mvc-basics/employee/10.xml

A válasz test:

 999-999-9999 10 Tesztelő alkalmazott 

Most, ha nem használunk semmilyen kiterjesztést vagy használjon nem konfiguráltat, az alapértelmezett tartalomtípus kerül visszaadásra:

curl // localhost: 8080 / spring-mvc-basics / alkalmazott / 10

Most nézzük meg ennek a stratégiának a beállítását - mind Java, mind XML konfigurációval.

3.1. Java konfiguráció

public void configureContentNegotiation (ContentNegotiationConfigurer configurer) {configurer.favorPathExtension (true). favorParameter (hamis). ignoreAcceptHeader (true). useJaf (hamis). defaultContentType (MediaType.APPLICATION_JSON); }

Nézzük át a részleteket.

Először engedélyezzük az útvonal-kiterjesztési stratégiát. Érdemes megemlíteni azt is, hogy a Spring Framework 5.2.4-től kezdve a favorPathExtension (logikai érték) A módszer elavult annak érdekében, hogy megakadályozza az útvonal-kiterjesztések használatát a tartalmi tárgyalások során.

Ezután letiltjuk az URL paraméterstratégiát és a Elfogad fejléc stratégia - mert csak a tartalom típusának meghatározásához szeretnénk támaszkodni.

Ezután kikapcsoljuk a Java aktiválási keretrendszert; A JAF tartalék mechanizmusként használható a kimeneti formátum kiválasztására, ha a beérkező kérés nem felel meg az általunk konfigurált stratégiák egyikének sem. Letiltjuk, mert a JSON-t fogjuk alapértelmezett tartalomtípusként konfigurálni. Kérjük, vegye figyelembe, hogy a useJaf () A módszer az 5. tavaszi keretrendszertől elavult.

És végül - a JSON-t állítjuk be alapértelmezettként. Ez azt jelenti, hogy ha a két stratégia egyikének sem felel meg, akkor az összes beérkező kérés leképezésre kerül a JSON-ot kiszolgáló vezérlő módszerhez.

3.2. XML konfiguráció

Vizsgáljuk meg ugyanezt a pontos konfigurációt is, csak XML használatával:

4. Az URL-paraméter stratégia

Az előző szakaszban használtunk útvonal-kiterjesztéseket - állítsuk be most a Spring MVC-t az útvonal-paraméterek felhasználására.

A. Értékének beállításával engedélyezhetjük ezt a stratégiát favorParameter tulajdonság igaz.

Nézzük meg gyorsan, hogy működne ez az előző példánkkal:

curl // localhost: 8080 / spring-mvc-basics / worker / 10? mediaType = json

És itt lesz a JSON válaszadó testülete:

{"id": 10, "name": "Test Employee", "contactNumber": "999-999-9999"}

Ha az XML paramétert használjuk, a kimenet XML formában lesz:

curl // localhost: 8080 / spring-mvc-basics / worker / 10? mediaType = xml

A válasz test:

 999-999-9999 10 Tesztelő alkalmazott 

Most végezzük el a konfigurációt - újra, először a Java, majd az XML használatával.

4.1. Java konfiguráció

public void configureContentNegotiation (ContentNegotiationConfigurer konfiguráló) {configurer.favorPathExtension (hamis). favorParameter (true). paraméterNév ("mediaType"). ignoreAcceptHeader (true). useJaf (hamis). alapértelmezettContentType (MediaType.APPLICATION_JSON). mediaType ("xml", MediaType.APPLICATION_XML). mediaType ("json", MediaType.APPLICATION_JSON); } 

Olvassuk végig ezt a konfigurációt.

Először természetesen az út meghosszabbítása és a Elfogad fejléc stratégiák le vannak tiltva (valamint a JAF).

A konfiguráció többi része ugyanaz.

4.2. XML konfiguráció

Azt is megtehetjük mindkét stratégia (kiterjesztés és paraméter) engedélyezve ugyanabban az időben:

public void configureContentNegotiation (ContentNegotiationConfigurer configurer) {configurer.favorPathExtension (true). favorParameter (true). paraméterNév ("mediaType"). ignoreAcceptHeader (true). useJaf (hamis). alapértelmezettContentType (MediaType.APPLICATION_JSON). mediaType ("xml", MediaType.APPLICATION_XML). mediaType ("json", MediaType.APPLICATION_JSON); }

Ebben az esetben a Spring először az útvonal kiterjesztését keresi, ha ez nincs, akkor az útvonal paramétert keresi. És ha mindkettő nem érhető el a bemeneti kérelemben, akkor az alapértelmezett tartalomtípus visszakerül.

5. A Elfogad Fejléc stratégia

Ha a Elfogad fejléc engedélyezve van, a Spring MVC a bejövő kérésben keresi az értékét az ábrázolás típusának meghatározásához.

Be kell állítanunk a ignoreAcceptHeader hamis értékre, hogy ezt a megközelítést lehetővé tegyük, és letiltjuk a másik két stratégiát, csak azért, hogy tudjuk, hogy csak a Elfogad fejléc.

5.1. Java konfiguráció

public void configureContentNegotiation (ContentNegotiationConfigurer configurer) {configurer.favorPathExtension (true). favorParameter (hamis). paraméterNév ("mediaType"). ignoreAcceptHeader (hamis). useJaf (hamis). alapértelmezettContentType (MediaType.APPLICATION_JSON). mediaType ("xml", MediaType.APPLICATION_XML). mediaType ("json", MediaType.APPLICATION_JSON); }

5.2. XML konfiguráció

Végül be kell kapcsolnunk a tartalmi egyeztetés kezelőjét, beépülve a teljes konfigurációba:

6. Következtetés

És készen vagyunk. Megvizsgáltuk, hogyan működik a tartalmi egyeztetés tavaszi MVC-ben, és néhány példára összpontosítottunk, hogy ezt felállítsuk különféle stratégiák alkalmazásával a tartalom típusának meghatározásához.

A cikk teljes megvalósítása a GitHub oldalon található.