ResponseEntity가 무엇인지 알기 위해서 사전 지식으로 REST API가 무엇인지 알아야 한다.
REST API에 대해 정리한 글이 존재하니 무엇인지 보고 오면 좋을 듯하다.
https://wonsjung.tistory.com/418
1. 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를 포함한다.
ResponseEntity의 생성자를 보면 this()를 통해서 매개변수가 3개인 생성자를 호출해 결국엔 아래 보이는 매개변수가 3개인 생성자로 가게 된다.
public ResponseEntity(HttpStatus status) {
this(null, null, status);
}
public ResponseEntity(@Nullable T body, HttpStatus status) {
this(body, null, status);
}
2. 예시를 통해 더 알아보자.
@RestController
public class TestController {
@GetMapping("/test")
public ResponseEntity getAllUsers(){
return new ResponseEntity(HttpStatus.OK);
}
}
간단한 코드를 작성하고 Postman으로 요청하면 상태코드 200을 확인할 수 있다.
이제 ResponseEntity를 이용해서 클라이언트에게 응답을 보내는 예제를 정리해보자.
@Data
public class Message {
private StatusEnum status;
private String message;
private Object data;
public Message() {
this.status = StatusEnum.BAD_REQUEST;
this.data = null;
this.message = null;
}
}
Message라는 클래스를 생성하였다. 상태코드 / 메세지 / 데이터를 담을 필드를 추가해준다.
public enum StatusEnum {
OK(200, "OK"),
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을 생성해준다.
@RestController
public class UserController {
private UserDaoService userDaoService;
public UserController(UserDaoService userDaoService) {
this.userDaoService = userDaoService;
}
@GetMapping(value = "/user/{id}")
public ResponseEntity<Message> findById(@PathVariable int id) {
User user = userDaoService.findOne(id);
Message message = new Message();
HttpHeaders headers= new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
message.setStatus(StatusEnum.OK);
message.setMessage("성공 코드");
message.setData(user);
return new ResponseEntity<>(message, headers, HttpStatus.OK);
}
}
이제 위와 같은 Controller를 하나 생성한 후, id를 통해 일치하는 User를 조회하고 Message 클래스를 통해서 StatusCode, ResponseMessage, ResponseData를 담아서 클라이언트에게 응답을 전송해준다.
이제 Postman을 통해 결과를 확인해보면
위와 같이 올바르게 작동하는 것을 확인할 수 있다.
'Spring > API' 카테고리의 다른 글
Spring Boot OpenAPI 3.0 + Swagger version 3 적용 및 설정하기, Swagger에 JWT 기능 설정하기 (1) | 2023.06.21 |
---|---|
API 개발 - 컬렉션 조회(페치 조인의 페이징 한계 돌파) (0) | 2022.07.01 |
API 개발 - 컬렉션 조회 (페치 조인 최적화) (0) | 2022.07.01 |
API 개발 : 컬렉션 조회 (0) | 2022.06.28 |
API 개발 : 간단한 주문조회 (지연로딩 최적화 - 패치 조인) (0) | 2022.06.26 |