Sobes.tech
Назад к вопросам
Junior — Middle
123

Чем отличаются аннотации ResponseEntity и ResponseBody в контексте обработки HTTP-ответов в Spring?

Ответ от нейросети

sobes.tech AI

Аннотация @ResponseBody в Spring указывает, что возвращаемое значение метода контроллера должно быть сериализовано напрямую в тело HTTP-ответа (например, в JSON или XML), минуя отображение на представление (view). Она применяется к методам или классам.

ResponseEntity — это класс-обёртка, который позволяет не только вернуть тело ответа, но и дополнительно задать HTTP-статус, заголовки и другие параметры ответа. Использование ResponseEntity даёт более гибкий контроль над HTTP-ответом.

Пример:

@GetMapping("/user")
@ResponseBody
public User getUser() {
    return new User("John", 30); // тело будет сериализовано в JSON
}

@GetMapping("/userWithStatus")
public ResponseEntity<User> getUserWithStatus() {
    User user = new User("John", 30);
    return ResponseEntity.status(HttpStatus.OK)
                         .header("Custom-Header", "value")
                         .body(user);
}

Таким образом, @ResponseBody — это способ указать, что метод возвращает тело ответа, а ResponseEntity — объект, который содержит тело, статус и заголовки HTTP-ответа.