我的POST API如下:https://out-test.com/test/out/{ "key":"value" }
当我在浏览器中复制粘贴URL时,它可以正常工作,它接受它。
但是在Android中,我得到了回复Method Not Allowed
。
我的API调用:
@POST
Call<OUT> updateOUT( @Url String urlWithJson );
改装声明:
// Retrofit2 implementation
String BASE_API_URL = "https://out-test.com/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl( BASE_API_URL )
.addConverterFactory( GsonConverterFactory.create() )
.build();
final OutAPI api = retrofit.create( OutAPI.class );
将对象解析为String(我已经对JSON进行了验证)
Gson gson = new Gson();
String jsonString = gson.toJson(out);
String url = "test/out/" + jsonString;
然后我打电话给POST:
api.updateOut( url ).enqueue(new Callback<Out>() {
@Override
public void onResponse(Call<Out> call, Response<Out> response) {
Log.d(TAG, "onResponse:" + response );
}
@Override
public void onFailure(Call<Out> call, Throwable t) {
Log.d(TAG, "onFailure: " + t);
}
});
有人知道我在这里做错了什么吗?我想念某个地方吗?在互联网上进行搜索,但找不到任何可行的解决方案。
@EDIT: 当我调试并查看响应和URL时(如果我将URL的值复制并粘贴到浏览器中),它将正常工作。
问候
答案 0 :(得分:0)
尝试更换
@POST
Call<OUT> updateOUT( @Url String urlWithJson );
此以及以下内容。
@POST("test/out/{key_value}")
Call<OUT> updateOUT(@Path("key_value") String keyAndValue);
然后,按如下所示更新其余代码
// Retrofit2 implementation
String BASE_API_URL = "https://out-test.com/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl( BASE_API_URL )
.addConverterFactory( GsonConverterFactory.create() )
.build();
final OutAPI api = retrofit.create( OutAPI.class );
Gson gson = new Gson();
String jsonString = gson.toJson(out);
api.updateOut(jsonString).enqueue(new Callback<Out>() {
@Override
public void onResponse(Call<Out> call, Response<Out> response) {
Log.d(TAG, "onResponse:" + response );
}
@Override
public void onFailure(Call<Out> call, Throwable t) {
Log.d(TAG, "onFailure: " + t);
}
});
答案 1 :(得分:0)
使用改装提供的车身,并这样做
@POST("test/out/")
Call<OUT> updateOUT(@Body JsonObject urlWithJson );
then follow
Retrofit declaration:
// Retrofit2 implementation
String BASE_API_URL = "https://out-test.com/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl( BASE_API_URL )
.addConverterFactory( GsonConverterFactory.create() )
.build();
Then Pass your Json using GSON like:
JsonObject jsonObj= new JsonObject
jsonObj.addProperty("order",yourvalue) ;
And then call POST :
api.updateOut( jsonObj).enqueue(new Callback<Out>() {
@Override
public void onResponse(Call<Out> call, Response<Out> response) {
Log.d(TAG, "onResponse:" + response );
}
@Override
public void onFailure(Call<Out> call, Throwable t) {
Log.d(TAG, "onFailure: " + t);
}
});
答案 2 :(得分:0)
感觉有点愚蠢,但是问题是创建API的人为我提供了错误的文档。请求不是POST,而是GET。但是仍然存在错误问题,但是这次是错误的Content-Type
,而不是text/plain
,是application/json
。谢谢大家,为我提供帮助。正如@Yupi所建议的,Postman是调试此问题的工具。谢谢。