ResponseEntity 에 대해 알아봅시다
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