카테고리 없음

응답? ResponseEntity?

k-hamin 2024. 8. 13. 15:23

ResponseEntity HttpEntity를 상속한 클래스로, Http 응답과 관련된 설정들을 응답에 추가할 수 있도록 해준다.

 

status-line의 응답 코드, 헤더, 바디를 설정할 수 있도록 만들어주는 것이다.


아래 코드를 살펴보자!

   @PostMapping("/members")   //(1)
    public ResponseEntity<Long> createMember( //(2)
            @RequestBody MemberCreateRequest request   //(3)
    ) {
        Long memberId = memberService.createMember(request);  //(4)
        return ResponseEntity.ok(memberId);  //(5)
    }

 

(1) "/members"로 들어오는 POST 요청이 있을 때 아래 메서드가 호출된다.

(2) .

(3) "@RequestBody" 어노테이션은 클라이언트가 요청 본문에 JSON 형식으로 보낸 데이터를 MemberCreateRequest 객체로 변환한다.

(4) .

(5) ok() 함수를 호출해 HTTP 200 OK 상태 코드를 나타내는 응답을 생성하며 응답 바디에는 memberId가 포함된다.

 

 

전체 흐름

 

1. 클라이언트가 "/member"로 요청을 보내면 요청 본문에 담긴 데이터를  MemberCreateRequest 객체로 변환하다.

2. 서비스 계층의 createMember 메서드를 호출해 회원을 생성하고 생성된 회원의 ID를 반환받는다.

3, 반환된 ID를 HTTP 200 OK 응답과 함께 클라이언트에게 반환한다.


 

위에서 ResponseEntity를 사용하면 status-line의 응답 코드, 헤더, 바디를 설정할 수 있다고 하였다.

 

하나씩 해보자!

 

 

 

Response Code 변경하기

 

1. 명시적으로

ResponseEntity.status(200) // 200번으로 설정
ResponseEntity.status(201) // 201번으로 설정
ResponseEntity.status(202) // 202번으로 설정

 

2. 메서드 활용

ResponseEntity.ok() // status(200)과 동일 
ResponseEntity.created([LocationURI]) // status(201)과 동일
ResponseEntity.accepted() // status(202)와 동일

 

  • ResponseEntity.ok(): HTTP 200 OK 상태 코드 설정. 요청이 성공적으로 처리되었음을 의미
  • ResponseEntity.created([LocationURI]): HTTP 201 Created 상태 코드 설정. 리소스가 성공적으로 생성되었음을 의미하며, 생성된 리소스의 URI를 함께 제공
  • ResponseEntity.accepted(): HTTP 202 Accepted 상태 코드 설정. 요청이 수락되었지만, 처리되지 않았음을 의미

 

헤더 변경하기

@GetMapping("/members/{id}")
public ResponseEntity<MemberGetResponse> getMember(
        @PathVariable("id") Long id
){
    HttpHeaders headers=new HttpHeaders();
    headers.add("Member-Version","1");
    MemberGetResponse member=memberService.getMember(id);

    return ResponseEntity.ok().headers(headers).body((member));
}

 

HttpHeaders 객체를 headers 함수의 파라미터로 넘김으로써 변경할 수 있다.

 

바디 변경하기

return ResponseEntity.ok().body( new MemberGetResponse("하하",12));

바디 값은 body()로 설정할 수 있다.