Returning JSON from a record list
Hub › Java › Beginner › Returning JSON from a record list
Goal
Change the controller's return type from String to List<Item> and watch Spring Boot serialize it to JSON. After this page you will understand how the exit endpoint produces its response body.
Prerequisites
How Spring Boot serializes JSON
When a @RestController method returns an object (anything other than a String), Spring Boot hands the object to Jackson — the JSON library bundled with spring-boot-starter-web. Jackson reflects over the object's fields and writes them as a JSON document.
For a record, Jackson uses the record's accessors. Item(int id, String name) serializes to {"id": 1, "name": "notebook"} with no extra annotations or configuration.
A List<Item> serializes to a JSON array of those objects.
You do not write the serializer. You do not register a converter. You return the object; Jackson writes JSON.
For the full Jackson configuration surface, see the Spring Boot JSON section.
Code
Replace the contents of HelloController.java with this version (we will rename it on the next page; for now it stays as HelloController):
package com.example.itemsapi;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
record Item(int id, String name) {}
@GetMapping("/hello")
public List<Item> hello() {
return List.of(
new Item(1, "notebook"),
new Item(2, "pen"),
new Item(3, "stapler")
);
}
}Restart the app:
./mvnw spring-boot:runIn a second terminal:
curl http://localhost:8080/helloOutput:
[{"id":1,"name":"notebook"},{"id":2,"name":"pen"},{"id":3,"name":"stapler"}]Add -i to inspect the headers:
curl -i http://localhost:8080/helloHTTP/1.1 200
Content-Type: application/json
...
[{"id":1,"name":"notebook"},{"id":2,"name":"pen"},{"id":3,"name":"stapler"}]Content-Type: application/json is set automatically because the return type is not a String.
Stop the server with Ctrl-C.
Next → GET /items