1. ResponseEntity란?
ResponseEntity는 스프링 프레임워크의 일부로, HTTP 요청에 대한 응답을 포괄적으로 나타내는 클래스이다. 이 클래스는 HTTP 상태 코드, 응답 헤더, 그리고 응답 본문을 포함할 수 있다. 코틀린에서 ResponseEntity를 사용하면, 타입 안전성 및 간결한 문법의 이점을 통해 API 응답을 효과적으로 구성할 수 있다.
2. 주요 HTTP 응답 코드
- 200 OK : 요청이 성공적으로 처리되었음을 나타내는 표준 응답이다. 데이터 검색 요청에 주로 사용된다.
- 201 Created : 새로운 리소스가 성공적으로 생성되었음을 나타내는 응답이다. 주로 POST 요청에서 사용된다.
- 204 No Content : 요청이 성공적이었으나, 클라이언트에게 전달할 새로운 내용이 없음을 나타낸다.
- 400 Bad Request : 클라이언트의 요청이 잘못된 형식이거나, 처리할 수 없음을 나타낸다.
- 401 Unauthorized : 요청이 인증을 필요로 하며, 인증이 되지 않았음을 나타낸다.
- 403 Forbidden : 서버가 요청을 이해했지만, 권한이 없어 요청을 거부함을 나타낸다.
- 404 Not Found : 요청한 리소스를 서버에서 찾을 수 없음을 나타낸다.
- 500 Internal Server Error : 서버에서 요청을 처리하는 중 오류가 발생했음을 나타낸다.
3. ResponseEntity 구현 방법
@RestController
@RequestMapping("/api/response")
class ResponseApiController {
//1. put 400
@GetMapping("")
fun getMapping(@RequestParam id:Int?): ResponseEntity<String> {
//1. id==null
if(id==null){
//badRequest : 400error
return ResponseEntity.badRequest().body("id 값 누락") //return ResponseEntity.status(400).body("id 값 누락")과 같은 의미
}
//2. id<10
if(id<10){
return ResponseEntity.status(400).body("id 값 10 이상 필수")
}
return ResponseEntity.ok("OK")
}
//2.post 200
@PostMapping("")
fun postMapping(@RequestBody itemData: ItemData?): ResponseEntity<ItemData> {
return ResponseEntity.status(200).body(itemData)
}
//3.put 201
@PutMapping("")
fun putMapping(@RequestBody itemData: ItemData?): ResponseEntity<ItemData> {
//1. 기존데이터가 없어서 새로 생성
return ResponseEntity.status(HttpStatus.CREATED).body(itemData)
}
//4.delete 500
@DeleteMapping("/{id}")
fun deleteMapping(@PathVariable id:Int): ResponseEntity<Any> {
return ResponseEntity.status(500).body("id : $id 삭제")
}
}
(1) 조건에 따른 400에러 구현(Get 메서드 활용)
쿼리 파라미터를 활용하여 id값이 null 이거나 10 미만인 경우 400에러가 발생하도록 구현한 것이다. 여기서 ResponseEntity.badRequest() 와 ResponseEntity.status(400)은 같은 의미라 볼 수 있다. ResponseEntity.status()를 활용하면 응답 코드 값을 직접 입력 할 수 있는 것이다.
itemData라는 data class를 만들고 그 데이터를 읽어들여 200 코드를 발생하도록 하는 것이다.
두 경우 모두 200코드가 나오는 것을 볼 수 있다. 여기서 postMapping(@RequestBody itemData: ItemData?)의 ?를 없애고 fun postMapping(@RequestBody itemData: ItemData)로 작성하여 data가 null 인 경우를 보면 다음과 같이 400에러가 뜨는 것을 볼 수 있다.
위에서 200 코드를 구현한 것과 마찬가지로 itemData라는 객체를 받아들이고 201코드를 내보내는 것이다. 차이점은 200코드를 발생시킬 땐, ResponseEntity.status(200)와 같이 숫자를 입력했다면 201코드를 발생시킬 땐, ResponseEntity.status(HttpStatus.CREATED)와 같이 status() 안에 HttpStatus를 입력했다는 점이다.
여기서는 @PathVariable를 사용하여 500 코드를 발생시켰다.





.png)

