Gymterview
junior

Что такое ResponseEntity и когда его использовать?

ResponseEntity – класс-обёртка для полного контроля HTTP-ответа: статус-код, заголовки и тело.

Пример
@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        return userService.findById(id)
                .map(ResponseEntity::ok)                    // 200 OK
                .orElse(ResponseEntity.notFound().build());  // 404 Not Found
    }

    @PostMapping
    public ResponseEntity<UserDto> createUser(@Valid @RequestBody CreateUserRequest request) {
        UserDto created = userService.create(request);
        URI location = URI.create("/api/users/" + created.getId());
        return ResponseEntity.created(location).body(created); // 201 Created + Location
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.delete(id);
        return ResponseEntity.noContent().build(); // 204 No Content
    }
}

Распространённые статус-коды

Пример
ResponseEntity.ok(body);                           // 200
ResponseEntity.created(uri).body(body);             // 201
ResponseEntity.noContent().build();                 // 204
ResponseEntity.badRequest().body(errorDto);         // 400
ResponseEntity.notFound().build();                  // 404
ResponseEntity.status(HttpStatus.CONFLICT).body(e); // 409

Когда использовать

  • Когда нужен статус-код, отличный от 200
  • Когда нужно установить заголовки ответа
  • Для POST-запросов (201 Created + Location header)
  • Для условных ответов (200 или 404)

На собеседовании: покажите знание REST best practices (правильные HTTP-статусы для каждой операции). Частая ошибка – возвращать 200 OK с сообщением об ошибке в теле.