티스토리 뷰

반응형

200 OK 응답뿐만 아니라 404 NOT FOUND 등 다양한 상태 코드를 제공하도록 하기 위해 사용합니다.

 

예를 들어 아래 코드를 보면 됩니다.

@GetMapping(value = ["/customer/{id}"])
fun getCustomer(@PathVariable id: Int) =
    ResponseEntity(customerService.getCustomer(id), HttpStatus.OK)

GetMapping이 기본적으로 HttpStatus.OK를 수행합니다. 이것을 적절하게 바꿔보겠습니다.

 

 

 

GET

@GetMapping(value = ["/customer/{id}"])
fun getCustomer(@PathVariable id: Int) : ResponseEntity<Customer?> {

    val customer = customerService.getCustomer(id)
    val status = if (customer == null) HttpStatus.NOT_FOUND else HttpStatus.OK

    return ResponseEntity(customer, status)
}

 

고객 정보가 있으면 정보와 200 OK를 응답하고 없으면 404 NOT FOUND를 응답합니다.

 

 

 

POST

@PostMapping(value = ["/customer"])
fun createCustomer(@RequestBody customer: Customer) : ResponseEntity<Unit> {

    customerService.createCustomer(customer)
    return ResponseEntity(Unit, HttpStatus.CREATED)
}

 

POST에서는 아무것도 반환하지 않으므로 Unit을 반환하고 201 CREATED를 응답합니다.

 

 

DELETE

@DeleteMapping(value = ["/customer/{id}"])
fun deleteCustomer(@PathVariable id: Int) : ResponseEntity<Unit> {

    val status = if (customerService.getCustomer(id) != null) {
        customerService.deleteCustomer(id)
        HttpStatus.OK
    } else HttpStatus.NOT_FOUND

    return ResponseEntity(Unit, status)
}

 

DELETE에서도 Unit을 반환하고, 지울 고객의 정보가 없으면 404 NOT FOUND를 응답하고 있으면 200 OK를 응답합니다.

 

 

UPDATE ( PUT )

@PutMapping(value = ["/customer/{id}"])
fun updateCustomer(@PathVariable id: Int, @RequestBody customer: Customer) : ResponseEntity<Unit?> {

    val status = if (customerService.getCustomer(id) != null) {
        customerService.updateCustomer(id, customer)
        HttpStatus.ACCEPTED
    } else HttpStatus.NOT_FOUND

    return ResponseEntity(Unit, status)
    // return ResponseEntity<Unit?>(null, status)
}

 

UPDATE도 Unit을 반환하며, 수정할 고객의 정보가 있으면 수정을 하고 202 ACCEPTED를 응답, 없으면 404 NOT FOUND를 응답합니다.

 

 

 

POST, DELETE, UPDATE에서 Unit을 반환하였습니다.

고객 정보가 없으면 { }를 받게 됩니다.

이것은 객체가 null이어서 빈 응답이 반환된 것입니다.

만약 { } 반환을 하고 싶지 않다면 Unit 대신에 null을 적어주면 됩니다.

 

return ResponseEntity<Unit?>(null, status)

 

반응형
댓글