HTTP 응답의 상태 코드, 헤더 및 본문을 캡슐화하여 반환
📟사용 예시
ResponseEntity.ok() // 상태코드를 200으로 설정하고 빌더를 반환합니다.
ResponseEntity.notFound() // 상태코드를 404로 설정하고 빌더를 반환합니다.
ResponseEntity.status(HttpStatus status) // 원하는 상태코드로 설정하고 빌더를 반환합니다.
>>return ResponseEntity.status(HttpStatus.CREATED).body("Resource created");
예를 들어, 클라이언트에게 201 (Created) 상태 코드를 전송하고 싶다면 다음과 같이 작성할 수 있습니다:
getStatusCode(): 현재 ResponseEntity의 Http Status code를 반환합니다.
getHeaders(): 현재 ResponseEntity의 header들을 반환합니다.
getBody(): 현재 ResponseEntity의 body 객체를 반환합니다.
- .ok -> 상태코드 성공
- .notFound -> 상태코드 실패
- .status().body(원하는 코드) -> 개발자가 원하는 코드를 전송
📟 객체에 담아서 반환
@GetMapping("/users/{id}")
public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
User user = userService.findUser(id);
if (user == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} else {
UserDto userDto = convertToDto(user); // convertToDto 메소드는 User 객체를 UserDto 객체로 변환합니다.
return new ResponseEntity<>(userDto, HttpStatus.OK);
}
}
- 기본적으로 HTTP 웹 브라우저 쪽으로 반환을 하는 클래스기 때문에, 백엔드 개발자가 로그를 찍어보거나 바디를 확인하고 싶다면 저런식으로
dto
객체 담아서 보낼 수도 있다.
📟 바디에 바로 반환
return ResponseEntity.ok().body("Hello World");
// "Hello World"가 HTTP 응답 본문이 됩니다.
return new ResponseEntity<>("Hello World", HttpStatus.OK);
// "Hello World"가 HTTP 응답 본문이 되고 상태 코드는 200 OK입니다.
return ResponseEntity.ok("Hello World");
// "Hello World"가 HTTP 응답 본문이 되고 상태 코드는 200 OK입니다.
3개의 코드가 동일한 응답을 보낸다.
------------------------------------------------------------------------
return ResponseEntity.notFound().build();
// Body 없이 Not Found (404) status code만 가진 response entity 반환
📟map 형식 / Json 객체
return ResponseEntity.ok(Collections.singletonMap("message", "Hello World"));
// -> {"message" : "Hello World"}
UserDto userDto = new UserDto(1L, "username", "email@example.com");
return ResponseEntity.ok(userDto);
위에 형식은
Header
부분에는 statuscode가 날라가고,body
에는 String타입이 나오는데 statuscode도 바디에 같이 보여지고 싶다면? ->Map구조 사용
보통은 에러 발생 시만 바디 내부에 에러 코드나 에러 메시지 등 추가 정보를 제공한다.
dto
객체에 담아서 보내는게 편해 보인다.
그냥 바디에 보내는 거는 텍스트로 보내는 거였고, JSON형태로 보내려면 객체에 담아야 한다.