我正在使用像这样的Retrofit获取所有书籍并删除所有书籍。
@GET("/books")
BookListResponse getAllBooks();
@DELETE("/clean")
Response deleteAllBooks();
但是返回了错误状态500(内部服务器错误)。 我使用Chrome restful客户端应用测试了这两个休闲电话并且它们正常运行。
但是,如果我只想获得一本书或删除一本这样的书
@GET("books/1")
BookResponse getOneBook();
@DELETE("books/1")
Response deleteOneBook();
他们可以正常工作。
所以我不确定这是服务器问题还是我错过了什么?
非常感谢你。
答案 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();