嗨,我是新来的改造和面临问题,发布调用api的json数据。我尝试了许多解决方案,但没有得到答案。
这是我的代码
Map<String,String> data=new HashMap<>();
data.put("email",email);
data.put("feedback",feedback);
RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), (new JSONObject(data)).toString());
Call<Feedback> call = apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,body);
call.enqueue(new Callback<Feedback>() {
@Override
public void onResponse(Call<Feedback> call, Response<Feedback> response) {
Log.e("Response",String.valueOf(response.code()));
Message message=response.body().getMessage();
String messageBody=message.toString();
String status=response.body().getStatus();
Toast.makeText(getApplicationContext(),status+" : "+messageBody,Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<Feedback> call, Throwable t) {
}
});
和我的界面是
@POST("feedbacks")
public Call<Feedback> feedbackResponse(@Header(ApiConstant.ACCESS_TOKEN) String accessToken, @Header(ApiConstant.TOKEN_TYPE) String tokenType,
@Header(ApiConstant.CLIENT) String client, @Header(ApiConstant.EXPIRY) String expiry,
@Header(ApiConstant.UID) String uid, @Body RequestBody feedback);
使用这样的标题不会产生问题,因为我将它用于每个api。所以不要认为标题是问题。
我的回复是
public class Feedback {
private Message message;
private String status;
private Data data;
public Message getMessage ()
{
return message;
}
public void setMessage (Message message)
{
this.message = message;
}
public String getStatus ()
{
return status;
}
public void setStatus (String status)
{
this.status = status;
}
public Data getData ()
{
return data;
}
public void setData (Data data)
{
this.data = data;
}
@Override
public String toString()
{
return "ClassPojo [message = "+message+", status = "+status+", data = "+data+"]";
}
}
请告诉我正确的方法。
答案 0 :(得分:1)
将签名更改为
@POST("feedbacks")
public Call<Feedback> feedbackResponse(@Header(ApiConstant.ACCESS_TOKEN) String accessToken, @Header(ApiConstant.TOKEN_TYPE) String tokenType,
@Header(ApiConstant.CLIENT) String client, @Header(ApiConstant.EXPIRY) String expiry,
@Header(ApiConstant.UID) String uid, @Body Map<String,Object> feedback);
并致电
Map<String,Object> data=new HashMap<>();
data.put("email",email);
data.put("feedback",feedback);
apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,data);
或将@Body数据类型更改为JsonObject
并尝试
JsonObject data = new JsonObject();
data.addProperty("email",email);
data.add("feedback",new Gson().toJsonTree(feedback));
apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,data);
或您也可以尝试@Body FeedbackRequestData data
。有多种方法可以做到。
apiInterface
必须使用gson解析器进行初始化。
如果每个请求都需要头,那么使用okHttp拦截器。
确保在选择JSON和GSON时http://www.jsonschema2pojo.org/生成反馈类