如何将原始json数据传递给改进2.0

时间:2017-02-16 12:01:53

标签: android json retrofit2

嗨,我是新来的改造和面临问题,发布调用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+"]";
}

}

请告诉我正确的方法。

1 个答案:

答案 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/生成反馈类