ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP Status Code, ResponseEntity에 대해서
    Back-end/Spring 2023. 12. 23. 15:58
    반응형

    들어가기

     HTTP 응답을 제어할 수 있는 ResponseEntity 객체에 대해서 알아보자.

     

    ResponseEntity

     ResponseEntity는 HttpEntity를 상속하여 구현되어 있다. HttpEntity의 구현 필드를 살펴보자.

    public class HttpEntity<T> {
        public static final HttpEntity<?> EMPTY = new HttpEntity();
        
        private final HttpHeaders headers;
        
        @Nullable
        private final T body;
        ...
    }

     

     HttpEntity는 HttpHeader를 설정할 수 있는 필드와, 제네릭 타입으로 Body 필드를 가지고 있다. 다음으로 이를 상속하는 ResponseEntity의 필드를 보자.

    public class ResponseEntity<T> extends HttpEntity<T> {
        private final HttpStatusCode status;
        ...
    }

     

     ResponseEntity는 필드로 HttpStatus를 설정하는 필드를 가지고 있고, HttpEntity를 상속하기 때문에 HttpEntity의 필드들도 제어할 수 있다. 실제로 어떻게 프로젝트에서 적용할 수 있는지 다음 코드를 보자.

        @PostMapping("/api/articles")
        public ResponseEntity<Article> addArticle(@RequestBody AddArticleRequest request) {
            Article savedArticle = blogService.save(request);
            return ResponseEntity.status(HttpStatus.CREATED).body(savedArticle);
        }
    
        @GetMapping("/api/articles")
        public ResponseEntity<List<ArticleResponse>> findAllArticles() {
            List<ArticleResponse> articles = blogService.findAll()
                    .stream()
                    .map(ArticleResponse::new)
                    .toList();
    
            return ResponseEntity.ok().body(articles);
        }

     

     ResponseEntity를 사용할 때에는 제네릭으로 사용한다. 즉, ResponseEntity<반환 타입>으로 지정한다. 위에서 설명했듯이 HTTP 응답에 필요한 요소로 HttpHeader, Body, HttpStatus를 입력해서 사용한다. 추가로, 사용할 때 Builder(빌더) 패턴을 사용하는 것을 권장하고 있다. 이렇게 사용하면 HttpStatus 코드를 잘못 입력하는 실수를 막을 수 있기 때문이다.

     

    HTTP Status Code(HTTP 응답 코드)

    1. 200 OK : 요청이 성공적으로 수행되었음.
    2. 201 Created : 요청이 성공적으로 수행되었고, 새로운 리소스가 생겼음.
    3. 400 Bad Request : 유효하지 않은 요청으로 요청에 실패함.
    4. 403 Forbidden : 권한이 없어서 요청에 실패함.
    5. 404 Not Found : 요청한 자원의 리소스가 없어서 요청에 실패함.
    6. 500 Internal Server Error : 서버 오류로 요청 실패함.
    반응형
Designed by Tistory.