REST Controllers
@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 обычно читается проще.