Зарегистрируйтесь, чтобы продолжить обучение

Объект ResponseEntity Java: Корпоративные приложения на Spring Boot

В некоторых ситуациях обработчики должны менять код ответа или добавлять свои заголовки. Сделать это можно с помощью возврата специального объекта ResponseEntity, который позволяет изменять HTTP-ответ.

Допустим, у нас есть обработчик, возвращающий список страниц Page. При этом мы хотим добавить заголовок X-Total-Count, который бы указывал на общее количество страниц:

@SpringBootApplication
@RestController
public class Application {
    private List<Page> pages = new ArrayList<Page>();

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @GetMapping("/pages")
    public List<Page> index() {
        return pages;
    }
}

Чтобы это сделать, нам нужно импортировать ResponseEntity. С его помощью мы соберем ответ и вернем его наружу:

// Остальные импорты
import org.springframework.http.ResponseEntity;

@SpringBootApplication
@RestController
public class Application {
    private List<Page> pages = new ArrayList<Page>();

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @GetMapping("/pages")
    public ResponseEntity<List<Page>> index(@RequestParam(defaultValue = "10") Integer limit) {
        var result = pages.stream().limit(limit).toList();

        return ResponseEntity.ok()
                .header("X-Total-Count", String.valueOf(pages.size()))
                .body(result);
    }

    @GetMapping("/pages/{id}")
    public ResponseEntity<Page> show(@PathVariable String id) {
        var page = pages.stream()
            .filter(p -> p.getId().equals(id))
            .findFirst();
        return ResponseEntity.of(page);
    }
}

Обсудим этот код подробнее. Здесь ResponseEntity — это билдер. Его сборка начинается с методов, определяющих код возврата: ok() соответствует коду 200, created() — коду 201 и так далее. Дальше можно задавать хедеры и передавать тело ответа.

Использование ResponseEntity меняет тип возвращаемого значения так, что изначальное значение оборачивается в ResponseEntity. Это значит, что с его введением придется работать через него целиком. Например, уже не получится просто так вернуть объект с данными, его нужно будет передавать в метод body().

В работе ResponseEntity вам пригодится еще три метода:

  • status(), чтобы указать произвольный статус
  • of(), чтобы работать с Optional
  • ok(), который принимает тело ответа и немного укорачивает запись. Это полезно, когда не нужно вызывать дополнительные методы

Дополнительные материалы

  1. Официальная документация
  2. Метод of() класса ResponseEntity

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 2 января

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»