스프링의 ResponseEntity<>

이해찬·2023년 9월 12일
0

TIL

목록 보기
12/20

Spring Framework -> ResponseEntity<>

HTTP 응답의 상태 코드, 헤더 및 본문을 캡슐화하여 반환

📟사용 예시

ResponseEntity.ok() // 상태코드를 200으로 설정하고 빌더를 반환합니다.
ResponseEntity.notFound() // 상태코드를 404로 설정하고 빌더를 반환합니다.

ResponseEntity.status(HttpStatus status) // 원하는 상태코드로 설정하고 빌더를 반환합니다.
>>return ResponseEntity.status(HttpStatus.CREATED).body("Resource created");
예를 들어, 클라이언트에게 201 (Created) 상태 코드를 전송하고 싶다면 다음과 같이 작성할 수 있습니다:

getStatusCode(): 현재 ResponseEntity의 Http Status code를 반환합니다.
getHeaders(): 현재 ResponseEntity의 header들을 반환합니다.
getBody(): 현재 ResponseEntity의 body 객체를 반환합니다.
  • .ok -> 상태코드 성공
  • .notFound -> 상태코드 실패
  • .status().body(원하는 코드) -> 개발자가 원하는 코드를 전송


📟 객체에 담아서 반환

@GetMapping("/users/{id}")
public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
    User user = userService.findUser(id);
    
    if (user == null) {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    } else {
        UserDto userDto = convertToDto(user);  // convertToDto 메소드는 User 객체를 UserDto 객체로 변환합니다.
        return new ResponseEntity<>(userDto, HttpStatus.OK);
    }
}
  • 기본적으로 HTTP 웹 브라우저 쪽으로 반환을 하는 클래스기 때문에, 백엔드 개발자가 로그를 찍어보거나 바디를 확인하고 싶다면 저런식으로 dto객체 담아서 보낼 수도 있다.



📟 바디에 바로 반환

return ResponseEntity.ok().body("Hello World");  
// "Hello World"가 HTTP 응답 본문이 됩니다.


return new ResponseEntity<>("Hello World", HttpStatus.OK);  
// "Hello World"가 HTTP 응답 본문이 되고 상태 코드는 200 OK입니다.


return ResponseEntity.ok("Hello World");  
// "Hello World"가 HTTP 응답 본문이 되고 상태 코드는 200 OK입니다.

3개의 코드가 동일한 응답을 보낸다.
------------------------------------------------------------------------

return ResponseEntity.notFound().build(); 
// Body 없이 Not Found (404) status code만 가진 response entity 반환 

📟map 형식 / Json 객체

return ResponseEntity.ok(Collections.singletonMap("message", "Hello World"));
// -> {"message" : "Hello World"}

UserDto userDto = new UserDto(1L, "username", "email@example.com");
return ResponseEntity.ok(userDto);

위에 형식은 Header부분에는 statuscode가 날라가고, body에는 String타입이 나오는데 statuscode도 바디에 같이 보여지고 싶다면? -> Map구조 사용


보통은 에러 발생 시만 바디 내부에 에러 코드나 에러 메시지 등 추가 정보를 제공한다.
dto 객체에 담아서 보내는게 편해 보인다.

그냥 바디에 보내는 거는 텍스트로 보내는 거였고, JSON형태로 보내려면 객체에 담아야 한다.

profile
디자인에서 개발자로

0개의 댓글