android - 如何将原始json数据传递给retrofit 2.0

标签 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);

使用这样的 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/

相关文章:

android - Phimp.me 项目的外部 native 构建问题

android - 从字符UTF-16获取表情unicode

javascript - 在 ReactJS 中用 Jquery 替换 JSON 时未定义“$”

Java 对象转 JSON : field names

android - 使用 Retrofit 2 上传文件

android - 如何使用 Retrofit 获取 json 响应

java - 每次打开应用程序时强制执行异步任务

java - JAX-RS - Glassfish 3.2 上没有根节点的 JSON

java - 如何使用Retrofit2 POST数据?

java - 无法在 Android 中写入文件,只读文件系统