【问题标题】:@DELETE method is not supporting(Non-body HTTP method cannot contain @Body or @TypedOutput.)@DELETE 方法不支持(非正文 HTTP 方法不能包含 @Body 或 @TypedOutput。)
【发布时间】:2016-10-22 21:17:05
【问题描述】:
@DELETE("/job/deletejob")
 Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);

收到此错误:

非正文 HTTP 方法不能包含 @Body 或 @TypedOutput

【问题讨论】:

  • 尝试查询而不是正文,因为 DELETE 请求上的正文没有定义的语义。请注意,在 DELETE 请求上发送正文可能会导致某些现有实现拒绝该请求。
  • 检查这个链接它可能对你有帮助github.com/square/retrofit/issues/458

标签: java retrofit rx-java


【解决方案1】:

我最近使用过这个官方解决方法:

@HTTP(method = "DELETE", path = "/job/deletejob", hasBody = true)
Observable<JobDeleteResponseModel> jobDelete(@Body JobDeleteRequestModel model);

【讨论】:

  • 不工作。我在下面的链接中使用过:stackoverflow.com/questions/48539478/…你能帮忙吗?
  • 工作正常。我被困了一整天,打算从后端更改我的 api 方法,但你拯救了我的一天..谢谢
  • path 如果接口方法的第一个参数是带有 @Url 注释的 url,则不是强制性的。更多细节在这里:stackoverflow.com/a/62920127/8956093
【解决方案2】:

试试这个就行了

@HTTP(method = "DELETE", path = "api/v3/delete", hasBody = true)
Call<ResponseBody> RESPONSE_BODY_CALL(@Header("Authorization") String authorization, @Body HashMap<String, List> stringListHashMap);

或检查 https://github.com/square/retrofit/issues/974

【讨论】:

    【解决方案3】:

    需要指定参数
    方法、路径、hasBody

    Kotlin方式

    @HTTP(method = "DELETE", path = "event/eventRemovePicture", hasBody = true)
    fun callDeleteImage(
        @Body body: RequestBody
    ): Call<RemoveEventPictureResponse>
    

    【讨论】:

      【解决方案4】:

      我有类似的错误。

      在我的情况下,我在接口中使用@GET,但后来我将其更正为@POST 方法并且它起作用了。

      【讨论】:

      • 谢谢,我也是这样,因为我复制粘贴了方法
      • 不小心,我也是。但是,是的,使用@Body 动词发出 get 请求是没有意义的。
      【解决方案5】:

      Kotlin 代码:

      path 如果您的接口方法的第一个参数是带有@Url 注释的url,则不需要 示例:

      @HTTP(method = "DELETE", hasBody = true)
      fun deleteStudentFromDatabase(
          @Url url: String,
          @Body payload: StudentModel
       ): Observable<Any>
      

      如果接口方法的第一个参数不是url,那么使用这个

          @HTTP(method = "DELETE", path = "{urlPath}", hasBody = true)
          fun deleteStudentFromDatabase(
              @Body payload: StudentModel,
              @Path("urlPath") url: String
           ): Observable<Any>
      

      【讨论】:

        【解决方案6】:

        改变

        @DELETE("/job/deletejob")
        Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);
        

        @HTTP(method = "DELETE", path = "/job/deletejob", hasBody = true)
        Observable<JobDeleteResponseModel> jobDelete( @Body JobDeleteRequestModel model);
        

        区别在于

        @DELETE("/job/deletejob") // For DELETE without body
        @HTTP(method = "DELETE", path = "/job/deletejob", hasBody = true) // For DELETE with body
        

        【讨论】:

          【解决方案7】:
          @HTTP(method = "DELETE", path = "{urlPath}", hasBody = true)
          

          这也很好用。发生这种情况是因为请求包含正文,但我们尚未定义。

          【讨论】:

            猜你喜欢
            • 2020-08-25
            • 2014-06-14
            • 2014-12-21
            • 2017-06-13
            • 2019-01-18
            • 2022-12-15
            • 1970-01-01
            • 1970-01-01
            • 2022-10-01
            相关资源
            最近更新 更多