您好,我是改造新手,在发布用于调用 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);
使用这样的 header 不会产生问题,因为我将它用于每个 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+"]";
}
}
请建议我正确的方法。
最佳答案
将签名更改为
@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数据
。有多种方法可以做到这一点。
apiInterface
必须使用 gson 解析器初始化。
如果每个请求都需要 header ,则使用 okHttp 拦截器。
确保您的反馈类是由 http://www.jsonschema2pojo.org/ 生成的同时选择 JSON 和 GSON
关于android - 如何将原始json数据传递给retrofit 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42273394/