Android Retrofit返回状态500内部服务器错误

时间:2014-04-04 17:59:16

标签: android rest retrofit

我正在使用像这样的Retrofit获取所有书籍并删除所有书籍。

 @GET("/books")
    BookListResponse getAllBooks();
    @DELETE("/clean")
    Response deleteAllBooks();

但是返回了错误状态500(内部服务器错误)。 我使用Chrome restful客户端应用测试了这两个休闲电话并且它们正常运行。

但是,如果我只想获得一本书或删除一本这样的书

 @GET("books/1")
    BookResponse getOneBook();
    @DELETE("books/1")
    Response deleteOneBook();

他们可以正常工作。

所以我不确定这是服务器问题还是我错过了什么?

非常感谢你。

3 个答案:

答案 0 :(得分:5)

这只是一个语义问题:当你对你的服务器说“请删除书”,但你没有说要删除哪本书时,服务器不知道该怎么做(当你发生这种情况时会发生这种情况发送DELETE到/ books)。因此错误500.但是当你说“请删除id为1的书”时,现在服务器知道该怎么做(当你将DELETE发送到/ books / 1时会发生这种情况。)

如果您像这样设置服务器,那么可以这样工作,但我从未见过任何REST服务来删除特定模型的所有记录。同样,如果您以这种方式对服务器进行编码就可以,只需确保请求以您希望的方式到达服务器。

毕竟,如果您收到错误500,请检查您的服务器。问题不在于Android方面,当然。

答案 1 :(得分:4)

只需在请求中添加标题接受,如下所示:

Request request = new Request.Builder()
                .url(urlString)
                .header("accept", "application/json")
                .build();

答案 2 :(得分:1)

更新
在Retrofit 2.1中,请求构建器已更改,因此您必须在改造界面方法中指定标题

@Headers("Accept: application/json") @GET("products") Call<Products> getAllProducts();

相关问题