GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Spring

[ Spring ] RestAPI 만능 객체 ResponseEntity<?>

Backcoder 2023. 1. 15. 15:18

@RestController 에서 JSON 타입으로 객체를 return 할 때, 

원래는  { A : a, B : b }  와 같은 JSON 형태로 return 값을 보내줘야 하지만 

객체 자체를 return 해도 위와 같은 JSON 형태로 변환해서 보내주는게 jackson 라이브러리 이죠.  

 

예를들어, 게시판 DTO 객체인 BoardDTO 를 return 하면 

VIEW 단에서는 AJAX 등을 통해 

res.title  / res.contents  와 같은 형식으로 JSON 값을 가져다 쓸 수 있습니다. 

 

하지만 이렇게 객체 자체만을 return 해주는 것에서 더 나아가서 

 

[ 객체자체  + 응답 상태 코드 + header 내용 ] 

 

추가적인 정보까지 함께 응답해 줄 수 있게 해주는 만능 객체 그릇이 바로 ResponseEntity 입니다. 

 

모든 객체 Type 에 상관없이 객체 자체를 body 에 담아서 보낼 수 있고 

return 조건에 따라 statusCode 에 응답 상태코드를 담아 보낼 수 있습니다. 

VIEW 단 개발자에게 추가적인 정보를 보내기 위해 Header 에 정보를 더 담아서 보낼 수 도 있습니다. 

 

특히나 응답상태 코드를 이용해 조건에 따른 오류 및 처리를 해줄 수 있다는 점 때문에 

Rest API 에서는 return Type 을 사실 상 ResponseEntity<?> 로 고정해 두고 많이 사용한다고 합니다. 

 

 

[ ResponseEntity<?> ] 

 

1. 오류처리 / statusCode 

@GetMapping("/hi")
    public ResponseEntity<?> hello(String nickname) {
        if (nickname ==null || nickname.equals("")){
            return ResponseEntity.
badRequest().
build();
        }
        return ResponseEntity.
ok()
.body(nickname + "님 성공");
    }

- null 일 경우, ResponseEntity 에는 데이터 자체를 담을 필요도 없습니다. 

status 로 badRequest 만 담아서  return 해줍니다. 

- null 이 아닐 경우, ok 상태코드와 함께 body 에 데이터를 담아서 보내줍니다. 

 



2. 헤더에 정보담아 보내기 
- 응답을 헤더에 커스텀해서 담아서 보낼 수 있습니다. 
=> 클라이언트쪽 개발자에게 필요한 데이터를 전달할 수 있습니다. 

    @GetMapping("/hi")
    public ResponseEntity<?> hello(String nickname) {
        if (nickname ==null || nickname.equals("")){
            return ResponseEntity.
                    badRequest().
                    body("이름을 입력해야 합니다.");
        }


        // Header로 데이터 (key, value ) 값 전송 
        HttpHeaders headers = new HttpHeaders();
        headers.set("jsoninhead", "value1");
        headers.set("secondjson", "value2");

        return ResponseEntity.
                ok()
                .headers(headers)
                .body(nickname + "님 성공!");
    }