DeleteMapping에 대해 반드시 주의해야 할 사항에 대해 설명하려고 한다.
보통 리소스를 삭제할 때 DeleteMapping을 사용하는데, 이 때 리소스를 삭제를 할 때는 일반적으로 본문 없이 요청하는 것이 일반적이다.
RSETful API 설계 원칙에 따르면, DELETE 요청은 리소스의 URI를 통해 삭제할 대상을 명확히 지정해야 하며, 본문을 포함하는 것은 비표준적이다.
따라서 400 Bad Request Error가 뜬다는 건 서버에서 @RequestBody를 기대하고 있는 경우, 400 Bad Request 오류가 발생한다.
결론부터 말하자면 보통 @PathVariable을 사용하는 것이 일반적이다. 위에서 설명 하였듯이,
DELETE 요청은 특정 리소스를 삭제하기 위해 사용되며, 삭제할 리소스를 식별하기 위해 URL 경로에 해당 리소스의 ID를 포함시키는 방식이 많이 쓰인다.
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
// 사용자 삭제 로직
return ResponseEntity.noContent().build(); // 204 No Content 응답
}
다음과 같은 코드가 있을 때
@DeleteMapping: HTTP DELETE 요청을 처리하는 메서드에 사용
@PathVariable: URL 경로에서 사용자 ID를 추출하여 메서드의 매개변수로 전달
이렇게 하면 클라이언트는 /users/1과 같은 URL을 통해 ID가 1인 사용자를 삭제할 수 있으며, 요청이 성공적으로 처리되면 204 No Content 응답을 반환할 수 있다. 이 방식은 API의 명확성을 높이고, 클라이언트가 어떤 리소스를 삭제하고 있는지 쉽게 이해할 수 있도록 도와준다. 따라서, 결론은 DeleteMapping에선 @PathVariable 어노테이션을 사용하는 것이 일반적이다.