Spring 's RequestBody- und ResponseBody-Anmerkungen
1. Einführung
In diesem kurzen Artikel geben wir einen kurzen Überblick über die Anmerkungen zu Spring@RequestBody und@ResponseBody.
Weitere Lektüre:
Leitfaden für Spring-Handler-Zuordnungen
In diesem Artikel wird erläutert, wie die HandlerMapping-Implementierung die URL zu einem bestimmten Handler auflöst.
Kurzanleitung für Federregler
Eine schnelle und praktische Anleitung zu Spring Controllern - sowohl für typische MVC-Apps als auch für REST-APIs.
Die Anmerkungen zu Spring @Controller und @RestController
Erfahren Sie mehr über die Unterschiede zwischen @Controller- und @RestController-Annotationen in Spring MVC.
2. @RequestBody
Einfach ausgedrückt, ordnet die Annotation@RequestBodyden Körper vonHttpRequesteinem Übertragungs- oder Domänenobjekt zu und ermöglicht so die automatische Deserialisierung des Körpers des eingehendenHttpRequestauf ein Java-Objekt.
Schauen wir uns zunächst eine Spring-Controller-Methode an:
@PostMapping("/request")
public ResponseEntity postController(
@RequestBody LoginForm loginForm) {
exampleService.fakeAuthenticate(loginForm);
return ResponseEntity.ok(HttpStatus.OK);
}
Spring deserialisiert den JSON-Code automatisch in einen Java-Typ, sofern ein geeigneter Typ angegeben ist. Standardmäßig muss der Typ, den wir mit der Annotation@RequestBodyannotieren, dem von unserem clientseitigen Controller gesendeten JSON entsprechen:
public class LoginForm {
private String username;
private String password;
// ...
}
Hier wird das Objekt, mit dem wir den Körper vonHttpRequestdarstellen, unserem Objekt vonLoginFormzugeordnet.
Testen wir dies mit CURL:
curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data
'{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request"
Dies ist alles, was für eine Spring REST-API und einen Angular-Client mit der Annotation @RequestBodybenötigt wird!
3. @ResponseBody
Die Annotation@ResponseBody teilt einem Controller mit, dass das zurückgegebene Objekt automatisch in JSON serialisiert und an das ObjektHttpResponsezurückgegeben wird.
Angenommen, wir haben ein benutzerdefiniertesResponse-Objekt:
public class ResponseTransfer {
private String text;
// standard getters/setters
}
Als nächstes kann der zugehörige Controller implementiert werden:
@Controller
@RequestMapping("/post")
public class ExamplePostController {
@Autowired
ExampleService exampleService;
@PostMapping("/response")
@ResponseBody
public ResponseTransfer postResponseController(
@RequestBody LoginForm loginForm) {
return new ResponseTransfer("Thanks For Posting!!!");
}
}
In der Entwicklerkonsole unseres Browsers oder mit einem Tool wie Postman sehen wir die folgende Antwort:
{"text":"Thanks For Posting!!!"}
Remember, we don’t need to annotate the @RestController-annotated controllers with the @ResponseBody annotation, da dies hier standardmäßig erfolgt.
4. Fazit
Wir haben einen einfachen Angular-Client für die Spring-App erstellt, der zeigt, wie die Anmerkungen@RestController und@ResponseBodyverwendet werden.
Wie immer sind Codebeispieleover on GitHub verfügbar.