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.


$config[zx-auto] not found$config[zx-overlay] not found