当前位置: 首页 > 知识库问答 >
问题:

改版2.0删除,放不起作用

汪阿苏
2023-03-14

我尝试使用Registfit2.0来实现一个库系统。可以添加图书,列出所有图书信息,列出一本书信息,删除一本书,删除所有图书,更新一本书信息。

我的baseURL结尾有一个“/”:

http://www.example.com/webservice/

前三个特性工作得很好:

@GET("books")
Call<ArrayList<Book>> listBooks();

@POST("books")
Call<Book> addBook(@Body Book book);

@GET("books/{id}")
Call<Book> getBookInfo(@Path("id") int bookId);
@DELETE("books/{id}")
Call<Void> deleteBook(@Path("id") int bookId);

@PUT("books/{id}")
Call<Book> updateBook(@Path("id") int bookId , @Body Book book);

@DELETE("clean")
Call<Void> deleteAll();
        Gson gson = new GsonBuilder()
        .setDateFormat(Constant.DATE_FORMAT)
        .create();

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constant.BASE_URL)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

LibraryService libraryServiceAPI = retrofit.create(LibraryService.class);
Call<Void> deleteBookCall = libraryServiceAPI.deleteBook(bookId);
deleteBookCall.enqueue(new Callback<Void>() {
    @Override
    public void onResponse(Call<Void> call, Response<Void> response) {
        if (response.isSuccessful()) {
            if (response.code() == 204) { // I get 200 here, not 204
                // but this is what I find:
                // response-->rawResponse-->request-->method == "GET"
                // This should be DELETE, am I right?
            }
        } else {
            Log.d(DELETE_BOOK_ERROR, String.valueOf(response.code()));
        }
    }

    @Override
    public void onFailure(Call<Void> call, Throwable t) {
        Log.d(DELETE_BOOK_ERROR, RESPONSE_FAILURE);
    }
});

您将在响应中看到,检查请求信息,method是“get”,但标记显示method=“delete”。

Update2:根据Dexter的建议,我添加了用于调试的HttpLoggingInterceptor,

            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        httpClient.interceptors().add(logging);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(httpClient.build()).build();

下面是两段日志:

    null

共有1个答案

郎喜
2023-03-14

我自己找答案。这是一个愚蠢的错误......当我调试响应消息时,我发现在我的delete and put方法中,reponse-->rawresponse-->priorresponse:response{protocol=http/1.1,code=301,message=moved PERMANENTLY,url=http://www.example.com/56eb7034cada930009ab0998/clean}

在我正确的get函数中,priorResponse为空。我在那里阅读HTTP基本信息,发现

如果客户机向“/testdir/”发出GET请求(即在目录中).......需要注意的是,如果客户机向“/testdir”发出GET请求(没有指定目录路径“/”),服务器返回一个“301 Move permanently”,新的“位置”为“/testdir/”,如下所示。

在添加这个“/”作为结束在我的删除,把界面url,现在所有的功能都工作了!!!有趣的是,在chrome插件-->高级Rest客户端中,我最终不需要这个“/”来使其工作。

@GET("books")
Call<ArrayList<Book>> listBooks();

@POST("books")
Call<Book> addBook(@Body Book book);

@GET("books/{id}/")
Call<Book> getBookInfo(@Path("id") int bookId);

@DELETE("books/{id}/")
Call<Void> deleteBook(@Path("id") int bookId);

@PUT("books/{id}/")
Call<Book> updateBook(@Path("id") int bookId, @Body Book book);

@DELETE("clean/")
Call<Void> deleteAll();
 类似资料:
  • 我正在使用改型2.0,我正在我的Android应用程序中实现删除功能,但是,我不能成功,有人能给我一个建议吗? 我两个都试过:

  • 问题内容: 我试图通过执行以下循环来获取TreeMap的前10个元素: 该打印 工具,为什么可能不起作用? 更新 这是我的实现: 更新 这很有用:Java Map按值排序。 问题答案: public int compare(Integer a, Integer b) { if (base.get(a) >= base.get(b)) { return -1; } else { return 1;

  • 我使用的是Kafka版本0.8.2。在开发过程中,我想我可能需要删除一个主题。所以我所做的是在服务器配置文件中放入以下一行,并启动两台kafka服务器。 当我需要删除一个主题并运行以下命令时, 现在距我运行“删除主题”命令已经17个小时了,但Kafka仍在向我显示该主题已标记为删除。是Kafka的虫子还是我在这里做错了什么?因为在我看来这不正常。有人能就此澄清一下吗?

  • 我有一个工作函数应用,它获取了一个 blob 输入和一个事件中心输出(在 beta 版中工作)。随着最新更改,我的函数不再起作用。我已尝试根据发行说明更新host.json文件,但它没有引用blob触发器: 此外,当Microsoft.NET.Sdk.Functions从1.0.14升级到1.0.19时,无法识别bbloTrigger属性,我的代码将无法编译: 如前所述,这是因为最近的Azure

  • 我正在尝试以编程方式配置log4j2v2。11.1作为DefaultRolloverStrategy的一部分,使用新的删除操作删除旧文件。 正如您可以从下面的代码中看到的,我已将系统设置为每天创建日志文件,并在文件大小达到1MB时滚动该文件。 我尝试使用两个条件将删除操作添加到DefaultRolloverStrategy中—IfFileName和IfLastModified。IfFileName

  • 我无法使用Hibernate JPA嵌入使cascase删除在Java EE容器管理的应用程序中工作。我们将不胜感激。我有一个实体‘公司',与其他实体有四个任何关系。当测试应用程序(使用Arquillian框架)时,我无法使级联删除工作;公司实体被删除,删除后子实体仍然存在。我读到了这里:JPA和Hibernate Cascade DELETE OneToMany不起作用,这可能是一个测试问题,所