Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Контроллер и JSON

REST API — это набор адресов, по которым другие программы (сайт на JavaScript, мобильное приложение, другой сервер) получают и меняют данные. Обмениваются они обычно в формате JSON. В Spring такие адреса обслуживает контроллер — класс с аннотацией @RestController.

Первый контроллер API

Создайте файл рядом с PostService.java:

// src/main/java/com/example/blog/PostController.java
package com.example.blog;
 
import java.util.List;
 
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class PostController {
 
    private final PostService postService;
 
    public PostController(PostService postService) {
        this.postService = postService;
    }
 
    @GetMapping("/api/posts")
    public List<Post> list() {
        return postService.findAll();
    }
}

@GetMapping("/api/posts") связывает метод с запросом GET /api/posts. Метод возвращает обычный список записей, а не текст ответа — превращением в JSON займётся Spring.

Проверка

Перезапустите приложение и вызовите адрес:

curl -i http://localhost:8080/api/posts
HTTP/1.1 200
Content-Type: application/json
Content-Length: 2
 
[]

Статей пока нет, поэтому пришёл пустой массив. Заголовок Content-Type: application/json сообщает клиенту, что в ответе JSON.

Как объект становится JSON

В стартер spring-boot-starter-webmvc входит библиотека Jackson. Она берёт компоненты записи и превращает их в поля JSON. Когда в следующих уроках мы научимся добавлять статьи, тот же адрес вернёт:

[{"id":1,"title":"Привет, Spring","body":"Первая статья","author":"anna","createdAt":"2026-10-04T08:50:07.494425300Z"}]

Каждый компонент записи Post стал полем с тем же именем. Дата типа Instant записана в стандартном формате ISO-8601, null превратился бы в null.

@RestController и @Controller

АннотацияЧто возвращает метод
@RestControllerДанные: объект превращается в JSON
@ControllerИмя HTML-шаблона страницы

@RestController — это @Controller плюс @ResponseBody на каждом методе. Страницы на шаблонах будут в пятой главе, а пока все контроллеры — @RestController.

Где держать адреса

Принято начинать адреса API с /api, а для коллекции объектов использовать существительное во множественном числе: /api/posts, /api/comments, /api/users. Так адреса API не пересекаются со страницами сайта.

Частая ошибка

Jackson видит только то, что доступно снаружи: компоненты записи или публичные методы-геттеры getTitle(). Если вернуть объект обычного класса с приватными полями и без геттеров, ошибки не будет — придёт ответ 200 с пустым объектом {}. Поля просто молча пропадут. Для ответов API используйте записи — у них всё нужное уже есть.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.