개인과제를 통한 API 구현 중 클라이언트의 응답을 상태코드와 메세지 그리고 Response하는 data를 반환하기 위하여
ResponseEntity에 대해 알아 보고 적용을 시켰다.
ResponseEntity는
Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다.
것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스
public class HttpEntity<T> {
private final HttpHeaders headers;
@Nullable
private final T body;
}
public class RequestEntity<T> extends HttpEntity<T>
public class ResponseEntity<T> extends HttpEntity<T>
HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스
ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스
HttpStatus, HttpHeaders, HttpBody를 포함한다.
esponseEntity의 생성자를 보면 this( )를 통해서 매개변수가 3개인 생성자를 호출해
아래의 매개변수가 3개인 생성자로 가게된다.
public ResponseEntity(HttpStatus status) {
this(null, null, status);
}
또한 상태코드(Status), 헤더(headers), 응답데이터(ResponseData)를 담는 생성자도 존재
public class ResponseEntity<T> extends HttpEntity<T> {
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
super(body, headers);
Assert.notNull(status, "HttpStatus must not be null");
this.status = status;
}
}
이것을 통하여 Response Entity body에 타입을 넣어 원하는 내용을 담아 클라이언트에 반환해줄 수 상태코드와 함께 보내줄 수 있다.
import lombok.Data;
@Data
public class ResponseMessage {
private StatusEnum status;
private String message;
private Object data;
public ResponseMessage() {
this.status = StatusEnum.BAD_REQUEST;
this.data = null;
this.message = null;
}
}
ResponseMessage라는 클래스라는 데이터를 만들어주고
public enum StatusEnum {
OK(200, "OK"),
CREATED(201, "CREATED"),
BAD_REQUEST(400, "BAD_REQUEST"),
NOT_FOUND(404, "NOT_FOUND"),
INTERNAL_SERER_ERROR(500, "INTERNAL_SERVER_ERROR");
int statusCode;
String code;
StatusEnum(int statusCode, String code) {
this.statusCode = statusCode;
this.code = code;
}
}
상태Enum을 만들어주어 내가 사용할 HttpStatus를 생성해 주었다.
이 클래스를 이용하여
@PostMapping("/create")
public ResponseEntity<ResponseMessage> createComment(
@PathVariable Long todoId,
@RequestBody CommentRequestDto requestDto,
@AuthenticationPrincipal UserDetailsImpl userDetails
){
Todo todo = todoService.findTodoById(todoId);
CommentResponseDto responseDto = commentService.createComment(userDetails.getUser(),todo,requestDto);
ResponseMessage message = new ResponseMessage();
HttpHeaders headers= new HttpHeaders();
headers.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
message.setStatus(StatusEnum.CREATED);
message.setMessage("댓글 생성 성공");
message.setData(requestDto);
return new ResponseEntity<>(message, headers, HttpStatus.CREATED);
}
createComment라는 API에 body 반환타입이 ResponseMessage를 적용시켜서 상태와 메서지 그리고 데이터를 넘겨 주게 되어 좀 더 명세하게 유연하게 응답해줄 수 있게 된다.
참고
'내일배움캠프' 카테고리의 다른 글
내일 배움 캠프 TIL -QueryDSL을 사용해서 수정일 순으로 정렬해서 가져오자 (0) | 2024.03.11 |
---|---|
내일배움캠프TIL - @RestControllerAdvice (0) | 2024.02.14 |
내일배움캠프TIL- 영속성 전이 (0) | 2024.01.30 |
내일배움캠프TIL- JWT (0) | 2024.01.25 |
내일배움캠프 TIL - 쿠키와 세션 (0) | 2024.01.24 |