티스토리 뷰

ResponseEntity 는 HttpEntity 를 상속받는 클래스로, HTTP 요청 또는 응답에 해당하는

HttpHeader 와 HttpBody를 포함하는 클래스입니다.

 

ResponseEntity 의 생성자를 봅시다.

HttpStatus 는 필수이고, 그 외에 body, headers(Map) 은 선택적으로 넣을 수 있습니다.

 

이 세 가지 파라미터를 가진다고 생각하면 되겠습니다.

 

body – the entity body
headers – the entity headers
status – the status code

/**
 * Create a {@code ResponseEntity} with a status code only.
 * @param status the status code
 */
public ResponseEntity(HttpStatus status) {
   this(null, null, status);
}

/**
 * Create a {@code ResponseEntity} with a body and status code.
 * @param body the entity body
 * @param status the status code
 */
public ResponseEntity(@Nullable T body, HttpStatus status) {
   this(body, null, status);
}

/**
 * Create a {@code ResponseEntity} with headers and a status code.
 * @param headers the entity headers
 * @param status the status code
 */
public ResponseEntity(MultiValueMap<String, String> headers, HttpStatus status) {
   this(null, headers, status);
}

/**
 * Create a {@code ResponseEntity} with a body, headers, and a status code.
 * @param body the entity body
 * @param headers the entity headers
 * @param status the status code
 */
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
   this(body, headers, (Object) status);
}

 

제 임의대로 코드를 만들어 보았습니다.

MessageRes 클래스를 정의내립니다.

package com.ssafy.api.responseDto;

import lombok.*;
import org.springframework.http.HttpStatus;

@Data
public class MessageRes {
   private HttpStatus status;
   private String message;
   private Object data;

   public MessageRes() {
      this.status = null;
      this.message = null;
      this.data = null;
   }
}

controller

@PostMapping("/signup")
public ResponseEntity<MessageRes> signUp(@Valid @RequestBody SignUpReq signUpReq){
   MessageRes messageRes = new MessageRes();
   HttpHeaders headers = new HttpHeaders();
   headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));

   messageRes.setStatus(HttpStatus.CREATED);
   messageRes.setMessage("유저생성 성공");
   messageRes.setData("유저 정보");

   userService.createUser(new UserDTO(signUpReq));

   return new ResponseEntity<MessageRes>(messageRes, headers, HttpStatus.CREATED);
}

result

 

위처럼 커스터마이징 하는 것도 좋지만, status 외의 정보들은 크게 필요하지 않아 보입니다.

 

@PostMapping("/signup")
@ResponseStatus(HttpStatus.CREATED)
Boolean signUp(@Valid @RequestBody SignUpReq signUpReq){
   return userService.createUser(new UserDTO(signUpReq));
}

 

이렇게만 써도 201 코드로 잘 날아옵니다.

상황에 맞게 적절하게 사용하면 좋겠습니다.

 

수정본입니다.

성공시와 실패시를 나누어 반환합니다.

성공시 Created, 실패시 Bad Request 를 반환합니다.

로직이 마음에 들지는 않는데.. 팀 프로젝트라 일단은 이대로 진행하려고 합니다.

data 부분에 생성한 유저정보(PK)를 넣어도 좋겠습니다.

@PostMapping("/signup")
public ResponseEntity<MessageRes> signUp(@Valid @RequestBody SignUpReq signUpReq){
   MessageRes messageRes = new MessageRes();
   UserDTO userDto = new UserDTO(signUpReq);
   if (userService.createUser(userDto)) {
      messageRes.setMessage("유저생성 성공");
      return new ResponseEntity<MessageRes>(messageRes, HttpStatus.CREATED);
   }
   messageRes.setMessage("유저생성 실패");
   return new ResponseEntity<MessageRes>(messageRes, HttpStatus.BAD_REQUEST);
}

 

 

참고 자료

https://devlog-wjdrbs96.tistory.com/182

 

[Spring Boot] ResponseEntity란 무엇인가?

먼저 REST API가 무엇인지는 아래 블로그를 먼저 잘 읽어보자. https://meetup.toast.com/posts/92 REST API 제대로 알고 사용하기 : TOAST Meetup REST API 제대로 알고 사용하기 meetup.toast.com 1. ResponseEn..

devlog-wjdrbs96.tistory.com

 

댓글