所以我正在尝试发出服务器请求,此请求的预期正文如下所示:["1"]
但如果我将字符串发送为"[\"1\"]"
,则会收到错误
JSONArray
,我尝试使用以下代码实现此目的:
JSONArray array = new JSONArray();
array.put("1");
但我在stetho的身体显示为:
{
"values":["1"]
}
也许我正在使用错误的课程或其他什么!
编辑:
这是我与
的api通话OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
RetrofitService retrofitService2 =new Retrofit.Builder()
.baseUrl("http://blynk-cloud.com/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(RetrofitService.class);
retrofitService2.closeDoor("3bf11f14e6094dd5a8f31f6d6fac8f3d",
"[\"1\"]")
.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
{
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
closeDoor方法:
@PUT("/{id}/update/D12")
Call<String> closeDoor(@Path("id") String id, @Body String code);
答案 0 :(得分:1)
如果您想发送请求JSON,例如["1"]
更改为:
JsonArray array = new JsonArray();
array.add(new JsonPrimitive("1"));
//output ["1"]
而不是:
JSONArray array = new JSONArray();
array.put("1");
答案 1 :(得分:0)
您收到500
错误的原因是您将响应发送为服务器所期望的text\plain
application\json
。
根据建议here,要发送原始JSON,您需要使用RequestBody
并传递它而不是String
RequestBody body = new RequestBody.create(MediaType.parse("application/json"),"[\"1\"]");
retrofitService2.closeDoor("3bf11f14e6094dd5a8f31f6d6fac8f3d",body).enqueue(...)
将您的改造方法改为
@PUT("/{id}/update/D12")
Call<String> closeDoor(@Path("id") String id, @Body RequestBody body);