Spring´s RequestBody- und ResponseBody-Anmerkungen

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.

Read more

Kurzanleitung für Federregler

Eine schnelle und praktische Anleitung zu Spring Controllern - sowohl für typische MVC-Apps als auch für REST-APIs.

Read more

Die Anmerkungen zu Spring @Controller und @RestController

Erfahren Sie mehr über die Unterschiede zwischen @Controller- und @RestController-Annotationen in Spring MVC.

Read more

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.