Labs ICT
โญ Pro Login

Request Body

ๆŽฅๆ”ถ JSON and other payloads.

The @RequestBody Annotation

When a client sends data to your API โ€” like creating a new user โ€” the data arrives in the request body. The @RequestBody annotation tells Spring to deserialize that body into a Java object.

Spring uses Jackson under the hood to map JSON fields to your object's properties. You define a class with the right fields, and Spring handles the conversion. No manual parsing, no boilerplate code.

JSON to Java Object Mapping

Define a POJO that matches the structure of the JSON your client sends. Spring maps the JSON keys to the object's fields automatically.

public class CreateUserRequest {
    private String name;
    private String email;
    private int age;

    getters and setters
}

@PostMapping("/users")
public User createUser(@RequestBody CreateUserRequest request) {
    User user = new User(request.getName(), request.getEmail());
    return userService.save(user);
}

A JSON body like {"name": "Alice", "email": "alice@example.com", "age": 30} gets converted to a CreateUserRequest instance.

@RequestBody with Validation

You can combine @RequestBody with validation annotations to enforce constraints on incoming data. Add @Valid before the parameter, and annotate your fields with constraints like @NotBlank or @Email.

If validation fails, Spring automatically returns a 400 Bad Request response with details about what went wrong. This keeps your controllers clean and your API consistent.

Handling Different Content Types

@RequestBody works with any content type that Jackson supports โ€” not just JSON. It can handle XML, YAML, and other formats. Spring determines the format from the Content-Type header.

In practice, JSON is the most common choice. But if your clients need XML support, just add the jackson-dataformat-xml dependency and annotate your endpoint with consumes = MediaType.APPLICATION_XML_VALUE.

Try it Yourself โ†’

๐Ÿงช Quick Quiz

What is @RequestBody used for?