I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:


1. Introduction

In this quick article, we provide a concise overview of the Spring @RequestBody and @ResponseBody annotations.

Further reading:

Guide to Spring Handler Mappings

The article explains how HandlerMapping implementation resolve URL to a particular Handler.

Quick Guide to Spring Controllers

A quick and practical guide to Spring Controllers  - both for typical MVC apps and for REST APIs.

The Spring @Controller and @RestController Annotations

Learn about the differences between @Controller and @RestController annotations in Spring MVC.

2. @RequestBody

Simply put, the @RequestBody annotation maps the HttpRequest body to a transfer or domain object, enabling automatic deserialization of the inbound HttpRequest body onto a Java object.

First, let's have a look at a Spring controller method:

public ResponseEntity postController(
  @RequestBody LoginForm loginForm) {
    return ResponseEntity.ok(HttpStatus.OK);

Spring automatically deserializes the JSON into a Java type assuming an appropriate one is specified. By default, the type we annotate with the @RequestBody annotation must correspond to the JSON sent from our client-side controller:

public class LoginForm {
    private String username;
    private String password;
    // ...

Here, the object we use to represent the HttpRequest body maps to our LoginForm object.

Let's test this using CURL:

curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data 
  '{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request"

This is all that is needed for a Spring REST API and an Angular client using the @RequestBody annotation!

3. @ResponseBody

The @ResponseBody annotation tells a controller that the object returned is automatically serialized into JSON and passed back into the HttpResponse object.

Suppose we have a custom Response object:

public class ResponseTransfer {
    private String text; 
    // standard getters/setters

Next, the associated controller can be implemented:

public class ExamplePostController {

    ExampleService exampleService;

    public ResponseTransfer postResponseController(
      @RequestBody LoginForm loginForm) {
        return new ResponseTransfer("Thanks For Posting!!!");

In the developer console of our browser or using a tool like Postman, we can see the following response:

{"text":"Thanks For Posting!!!"}

Remember, we don't need to annotate the @RestController-annotated controllers with the @ResponseBody annotation since it's done by default here.

4. Conclusion

We've built a simple Angular client for the Spring app that demonstrates how to use the @RestController and @ResponseBody annotations.

As always code samples are available over on GitHub.

REST bottom

I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

Comments are closed on this article!