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ó.