본문 바로가기
Error.

Android DELETE 요청 시 "Non-body HTTP method cannot contain Body" 오류 해결 방법

by h4r3 2025. 4. 4.
반응형

 

1. 개요

Android 앱에서 Retrofit을 사용하여 DELETE 요청을 보낼 때 다음과 같은 오류가 발생할 수 있습니다.

Non-body HTTP method cannot contain Body.

이 오류는 DELETE 요청이 HTTP 규칙상 본문(Body)을 포함할 수 없다는 제한 때문입니다. 이번 글에서는 이 오류가 발생하는 원인과 해결 방법을 자세히 설명하겠습니다.

 

2. 오류 원인

DELETE 요청은 일반적으로 요청 본문을 포함하지 않는 것이 원칙입니다. 하지만 일부 API는 DELETE 요청에 Body를 허용하기도 합니다. Retrofit은 기본적으로 DELETE 요청에 Body를 포함할 수 없도록 설계되어 있기 때문에, Body를 추가하려고 하면 위와 같은 오류가 발생합니다.

❌ 잘못된 코드 예시

@DELETE("/user/{id}")
suspend fun deleteUser(@Path("id") userId: String, @Body request: DeleteRequest): Response<Unit>

위 코드처럼 @DELETE 요청에 @Body를 포함하면 Retrofit에서 오류를 발생시킵니다.

 

3. 해결 방법

3.1 Query Parameter 사용하기

DELETE 요청에 Body를 사용할 수 없는 경우, 데이터를 Query Parameter로 전달하는 방법이 있습니다.

@DELETE("/user")
suspend fun deleteUser(@Query("id") userId: String): Response<Unit>

3.2 @HTTP 어노테이션 활용하기

Retrofit에서는 @HTTP 어노테이션을 사용하면 DELETE 요청에서도 Body를 포함할 수 있습니다.

@HTTP(method = "DELETE", path = "/user", hasBody = true)
suspend fun deleteUser(@Body request: DeleteRequest): Response<Unit>

이렇게 하면 DELETE 요청을 보내면서 Body를 포함할 수 있습니다.

3.3 서버 API 확인 및 수정

일부 서버에서는 DELETE 요청에 Body를 허용하지 않으므로, 서버 API 명세를 확인하고 필요하다면 수정 요청을 하는 것이 좋습니다.

 

4. 결론

  • Retrofit의 기본 DELETE 요청은 Body를 포함할 수 없습니다.
  • Query Parameter를 활용하거나 @HTTP 어노테이션을 사용하여 해결할 수 있습니다.
  • 서버 명세를 확인하고 필요하면 API를 수정하는 것도 방법입니다.

 

위 해결 방법을 적용하면 DELETE 요청 관련 오류를 효과적으로 해결할 수 있습니다.

도움이 되셨다면 댓글과 공유 부탁드립니다!

반응형