Vårens RequestBody og ResponseBody-merknader
1. Introduksjon
I denne raske opplæringen gir vi en kort oversikt over våren @Fotball og @ResponseBody kommentarer.
2. @Fotball
For å si det enkelt, de @Fotball merknader kartlegger HttpForespørsel kroppen til et overførings- eller domeneobjekt, som muliggjør automatisk deserialisering av den innkommende HttpForespørsel kroppen på et Java-objekt.
La oss først se på en vårkontrollermetode:
@PostMapping ("/ forespørsel") offentlig ResponseEntity postController (@RequestBody LoginForm loginForm) {exampleService.fakeAuthenticate (loginForm); returner ResponseEntity.ok (HttpStatus.OK); }
Våren deserialiserer JSON automatisk til en Java-type, forutsatt at en passende er spesifisert.
Som standard, typen vi kommenterer med @Fotball merknader må samsvare med JSON sendt fra vår klientside-kontroller:
offentlig klasse LoginForm {private String brukernavn; privat strengpassord; // ...}
Her er objektet vi bruker til å representere HttpForespørsel kroppskart til vår Innloggingsskjema gjenstand.
La oss teste dette ved hjelp av CURL:
curl -i \ -H "Godta: applikasjon / json" \ -H "Innholdstype: applikasjon / json" \ -X POST --data '{"brukernavn": "johnny", "passord": "passord"} '"//lokalhost:8080/.../forespørsel"
Dette er alt vi trenger for en Spring REST API og en Angular-klient som bruker @RequestBody kommentar.
3. @ResponseBody
De @ResponseBody kommentar forteller en kontroller at objektet som returneres blir automatisk serialisert til JSON og sendt tilbake til HttpResponse gjenstand.
Anta at vi har en skikk Respons gjenstand:
offentlig klasse ResponseTransfer {privat strengtekst; // standard getters / setters}
Deretter kan den tilknyttede kontrolleren implementeres:
@Controller @RequestMapping ("/ post") offentlig klasse ExamplePostController {@Autowired ExampleService exampleService; @PostMapping ("/ response") @ResponseBody public ResponseTransfer postResponseController (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("Thanks for Posting !!!"); }}
I utviklerkonsollen i nettleseren vår eller ved hjelp av et verktøy som Postman, kan vi se følgende svar:
{"text": "Takk for innlegg !!!"}
Husk at vi ikke trenger å kommentere @ RestController-merkede kontrollere med @ResponseBody kommentar siden Spring gjør det som standard.
3.1. Angi innholdstype
Når vi bruker @ResponseBody kommentar, kan vi fremdeles eksplisitt angi innholdstypen som metoden vår returnerer.
For det, vi kan bruke @RequestMapping‘S produserer Egenskap. Merk at merknader som @PostMapping, @GetMappingosv. definerer aliaser for den parameteren.
La oss nå legge til et nytt sluttpunkt som sender et JSON-svar:
@PostMapping (value = "/ content", produserer = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseTransfer postResponseJsonContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("JSON Content!"); }
I eksemplet brukte vi MediaType.APPLICATION_JSON_VALUE konstant. Alternativt kan vi bruke søknad / json direkte.
La oss deretter implementere en ny metode, kartlagt til den samme /innhold bane, men returnerer XML-innhold i stedet:
@PostMapping (value = "/ content", produserer = MediaType.APPLICATION_XML_VALUE) @ResponseBody public ResponseTransfer postResponseXmlContent (@RequestBody LoginForm loginForm) {return new ResponseTransfer ("XML Content!"); }
Nå, avhengig av verdien på et Aksepterer parameter sendt i forespørselens overskrift, får vi forskjellige svar.
La oss se dette i aksjon:
curl -i \ -H "Godta: applikasjon / json" \ -H "Innholdstype: applikasjon / json" \ -X POST --data '{"brukernavn": "johnny", "passord": "passord"} '"//lokalhost:8080/.../innhold"
CURL-kommandoen returnerer et JSON-svar:
HTTP / 1.1 200 Innholdstype: application / json Transfer-Encoding: chunked Date: Thu, 20 Feb 2020 19:43:06 GMT {"text": "JSON Content!"}
La oss endre Aksepterer parameter:
curl -i \ -H "Godta: applikasjon / xml" \ -H "Innholdstype: applikasjon / json" \ -X POST --data '{"brukernavn": "johnny", "passord": "passord"} '"//localhost:8080/.../content"
Som forventet får vi et XML-innhold denne gangen:
HTTP / 1.1 200 Innholdstype: applikasjon / xml Transfer-Encoding: chunked Date: Thu, 20 Feb 2020 19:43:19 GMT XML Content!
4. Konklusjon
Vi har bygget en enkel Angular-klient for Spring-appen som demonstrerer hvordan du bruker @Fotball og @ResponseBody kommentarer.
I tillegg viste vi hvordan du angir en innholdstype når du bruker @ResponseBody.
Som alltid er kodeeksempler tilgjengelig på GitHub.