REST Controllers

Базовый Spring
≈ 1 мин чтения

@RestController для API

В REST API методы контроллера обычно возвращают данные прямо в тело HTTP-ответа. Чтобы не ставить @ResponseBody на каждый метод, Spring MVC предоставляет @RestController. По смыслу это сочетание @Controller и поведения @ResponseBody для методов класса.

@RestController
@RequestMapping("/api/users")
class UserController {

    @GetMapping("/{id}")
    UserDto find(@PathVariable long id) {
        return userService.find(id);
    }
}

Возвращаемый UserDto становится телом ответа. Контроллеру не нужно вручную сериализовать объект или писать данные в Servlet response. Это делает методы REST API похожими на обычные Java-методы: аргументы описывают вход, а возвращаемый тип — результат операции.

Когда нужен ResponseEntity

Иногда одного тела ответа недостаточно: нужно явно выбрать HTTP status или добавить headers. Для этого метод может вернуть ResponseEntity.

@PostMapping
ResponseEntity<UserDto> create(@RequestBody CreateUserRequest request) {
    UserDto user = userService.create(request);
    return ResponseEntity.status(201).body(user);
}

Использовать ResponseEntity в каждом методе необязательно. Если стандартного статуса и обычного тела достаточно, прямой возврат DTO обычно читается проще.