Java 改装2.0删除,使其不工作

Java 改装2.0删除,使其不工作,java,android,retrofit,retrofit2,Java,Android,Retrofit,Retrofit2,我正在尝试使用翻新2.0来实现一个库系统。 它可以添加图书、列出所有图书信息、列出一个图书信息、删除一本图书、删除所有图书、更新一个图书信息 My baseURL的末尾有一个“/”: http://www.example.com/webservice/ 前三个功能非常有效: @GET("books") Call<ArrayList<Book>> listBooks(); @POST("books") Call<Book> addBook(@Body Boo

我正在尝试使用翻新2.0来实现一个库系统。 它可以添加图书、列出所有图书信息、列出一个图书信息、删除一本图书、删除所有图书、更新一个图书信息

My 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);
这里有两块原木:

  • @GET(“books/{id}”)
    调用getBookInfo(@Path(“id”)intbookid)
    这是正确的
  • 03-28 00:26:00.842 3171-3198/com.xiaoyaworm.prolificlibrary D/OkHttp: -->获取http/1.1 03-28 00:26:00.842 3171-3198/com.xiaoyaworm.prolificlibrary D/OkHttp:-->结束获取03-28 00:26:01.038 3171-3198/com.xiaoyaworm.prolificlibrary D/OkHttp:END DELETE 03-28 00:26:36.082
    3171-3198/com.xiaoyaworm.prolificlibrary D/OkHttp:我自己找到了答案。这是一个愚蠢的错误…..当我调试我的响应消息时,我在我的delete-and-put方法中发现,response-->rawResponse-->priorResponse:response{protocol=http/1.1,code=301,message=永久移动,url=}

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

    如果客户机向“/testdir/”(即在 目录)…值得注意的是,如果客户端向“/testdir”发出GET请求(不指定目录路径“/),服务器将返回一个“301永久移动”,新的“位置”为“/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();
    
    @GET(“书籍”)
    调用listBooks();
    @邮政(“书籍”)
    调用addBook(@Body Book);
    @获取(“books/{id}/”)
    调用getBookInfo(@Path(“id”)intbookid);
    @删除(“books/{id}/”)
    调用deleteBook(@Path(“id”)intbookid);
    @PUT(“books/{id}/”)
    调用updateBook(@Path(“id”)int bookId,@Body Book);
    @删除(“clean/”)
    调用deleteAll();
    
    我自己找到答案。这是一个愚蠢的错误…..当我调试我的响应消息时,我在我的delete-and-put方法中发现,response-->rawResponse-->priorResponse:response{protocol=http/1.1,code=301,message=永久移动,url=}

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

    如果客户机向“/testdir/”(即在 目录)…值得注意的是,如果客户端向“/testdir”发出GET请求(不指定目录路径“/),服务器将返回一个“301永久移动”,新的“位置”为“/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();
    
    @GET(“书籍”)
    调用listBooks();
    @邮政(“书籍”)
    调用addBook(@Body Book);
    @获取(“books/{id}/”)
    调用getBookInfo(@Path(“id”)intbookid);
    @删除(“books/{id}/”)
    调用deleteBook(@Path(“id”)intbookid);
    @PUT(“books/{id}/”)
    调用updateBook(@Path(“id”)int bookId,@Body Book);
    @删除(“clean/”)
    调用deleteAll();
    
    您能记录请求和响应吗。@Raghunandan我更新了那里的屏幕截图。谢谢。使用“HttpLoggingInterceptor”进行调试。它会让你清楚地知道什么是错的@德克斯特:谢谢你的建议,我把日志贴在这里。在chrome中使用Advanced rest client,通过调用Delete,相同的URL,我将得到204,显示该书已成功删除,但使用我的应用程序,通过Reformation 2.0调用Delete,我得到200作为响应,该书仍然存在,未被删除。你能记录请求和响应吗。@Raghundan我更新了那里的屏幕截图。谢谢。使用“HttpLoggingInterceptor”进行调试。它会让你清楚地知道什么是错的@德克斯特:谢谢你的建议,我把日志贴在这里。在chrome中使用Advanced rest client,通过调用Delete,相同的URL,我将得到204,显示该书已成功删除,但使用我的应用程序,使用Reformation 2.0调用Delete,我得到200作为响应,该书仍然存在,未被删除。哇,很高兴找到我的朋友。我当时看着这个很困惑,我现在明白了。我通常使用@DELETE(“path”)查找,没有任何问题。很高兴看到你解决了这个问题:)你好,@xiaoyaworm我是android开发的新手,我也尝试过一次改进,但我无法使用“发布、放置和删除”方法。你能提出你的改造项目吗?你已经用了所有不同的方法。。那太好了。谢谢我的邮件是tapankumarpatro05@gmail.com请兄弟..@TapanKumarPatro给你。我有另一个问题,问如何使改装删除,看看:哇,很好,找到我的朋友。我当时看着这个很困惑,我现在明白了。我通常使用@DELETE(“path”)查找,没有任何问题。很高兴看到你解决了这个问题:)你好,@xiaoyaworm我是android开发的新手,我也尝试过一次改进,但我无法使用“发布、放置和删除”方法。你能提出你的改造项目吗?你已经用了所有不同的方法。。那太好了。谢谢我的邮件是tapankumarpatro05@gmail.com请兄弟..@TapanKumarPatro给你。我还有一个问题问如何删除改装,请看:
                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();
    
    @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();