当前位置: 首页 > 知识库问答 >
问题:

无法使用改型2.0在post api数据中发送原始json数据

沃盛
2023-03-14

无法使用改型2.0在POSTapi数据中发送原始JSON数据

try {
  JSONObject myUserData = new JSONObject();
  myUserData.put("mobile", "917023847899");
  myUserData.put("displayName", "Deepuu");
  myUserData.put("info", "AD");
  myUserData.put("photo", "");
  myUserData.put("displayName", "Deepu");

  JSONObject deviceData = new JSONObject();
  ;
  deviceData.put("deviceId", "2124578910556991");
  deviceData.put("pnToken", "klklklkl");
  deviceData.put("os", "android");
  deviceData.put("targetTopic", "jkjkjkjkj");

  myUserData.put("device", "" + deviceData);
  OkHttpClient client = new OkHttpClient();

  Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

  Api Ainterface = retrofit.create(Api.class);

  Call<Response> data = Ainterface.getResponse(myUserData);
  data.enqueue(new Callback<Response>() {
    @Override
    public void onResponse(Call<Response> call, retrofit2.Response<Response> response) {
      if (response.isSuccessful()) {
        Response rr = response.body();
        Integer ss = rr.getStatusCode();
        Log.e("I Am", "Success"  );
      }
    }

    @Override
    public void onFailure(Call<Response> call, Throwable t) {
      Log.e("I Am", "Failed");
    }
  });

MyInterface:

@POST("appUsers/")
Call<Response> getResponse(@Body RequestBody value);

有人能推荐一种解决方案,使用Reformation 2.0POSTapi中发送原始JSON数据吗?我对改型还不熟悉;当我在onResponse方法中得到null响应时,请提供帮助。

共有2个答案

堵泽宇
2023-03-14

您可以在retro 2.0中发布原始jsonObject。需要像这样将其转换为RequestBody

RequestBody requestBody =RequestBody.create(MediaType.parse("application/json"),myUserData.toString() );
Call<Response> data = Ainterface.getResponse(requestBody);
庾波光
2023-03-14

您正在使用GsonConverterFactory。所以,您应该传递模型类对象,该对象通过改型转换为字符串并添加到请求正文中。但在代码中,您传递了JSONObject。

创建Model类,并根据项目结构更改包名称:

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Device {

@SerializedName("deviceId")
@Expose
private String deviceId;
@SerializedName("pnToken")
@Expose
private String pnToken;
@SerializedName("os")
@Expose
private String os;
@SerializedName("targetTopic")
@Expose
private String targetTopic;

/**
*
* @return
* The deviceId
*/
public String getDeviceId() {
return deviceId;
}

/**
*
* @param deviceId
* The deviceId
*/
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}

/**
*
* @return
* The pnToken
*/
public String getPnToken() {
return pnToken;
}

/**
*
* @param pnToken
* The pnToken
*/
public void setPnToken(String pnToken) {
this.pnToken = pnToken;
}

/**
*
* @return
* The os
*/
public String getOs() {
return os;
}

/**
*
* @param os
* The os
*/
public void setOs(String os) {
this.os = os;
}

/**
*
* @return
* The targetTopic
*/
public String getTargetTopic() {
return targetTopic;
}

/**
*
* @param targetTopic
* The targetTopic
*/
public void setTargetTopic(String targetTopic) {
this.targetTopic = targetTopic;
}

}
-----------------------------------com.example.Request.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Request {

@SerializedName("mobile")
@Expose
private String mobile;
@SerializedName("info")
@Expose
private String info;
@SerializedName("photo")
@Expose
private String photo;
@SerializedName("displayName")
@Expose
private String displayName;
@SerializedName("device")
@Expose
private Device device;

/**
*
* @return
* The mobile
*/
public String getMobile() {
return mobile;
}

/**
*
* @param mobile
* The mobile
*/
public void setMobile(String mobile) {
this.mobile = mobile;
}

/**
*
* @return
* The info
*/
public String getInfo() {
return info;
}

/**
*
* @param info
* The info
*/
public void setInfo(String info) {
this.info = info;
}

/**
*
* @return
* The photo
*/
public String getPhoto() {
return photo;
}

/**
*
* @param photo
* The photo
*/
public void setPhoto(String photo) {
this.photo = photo;
}

/**
*
* @return
* The displayName
*/
public String getDisplayName() {
return displayName;
}

/**
*
* @param displayName
* The displayName
*/
public void setDisplayName(String displayName) {
this.displayName = displayName;
}

/**
*
* @return
* The device
*/
public Device getDevice() {
return device;
}

/**
*
* @param device
* The device
*/
public void setDevice(Device device) {
this.device = device;
}

}

并要求邮寄如下:

@POST("yourpath")
    Call<YourResponseModelClass> getResponse(@Body RequestModelClass request);

更新YourResponseModelClass

可以从json生成模型类,http://www.jsonschema2pojo.org/

 类似资料:
  • 我正试图通过改造发布原始数据。 我发现了许多解决方案,以POST JSON在身体使用齐射,但我发送的数据不是JSON。 当我从邮递员那里打电话时,我得到的是数据,但不是Android系统。 请告诉我怎么做。 我试图以字符串形式发送,但错误代码为500 我也在JsonObject中发送数据,但不工作... 这是我的密码。。

  • 我无法在改型中以行json格式发送数据。 我将改装版1.9迁移到2。在Retrfit1.9中,我可以使用HashMap发送原始json,但在改型2中,我使用HashMap发送,但无法将数据作为json发送。所以我用pojo来代替。 api生成试图获取非对象属性的日志,因此我无法在json行中传递数据。 我刚刚在错误日志中看到了我的服务器详细信息,我的请求自动转换为GET。我在POST中使用Refo

  • 我正在寻找一种方法来传输任何文件类型的原始文件数据和任何可能的内容(我的意思是文件和文件内容都是用户生成的),在主干前端使用xhr/ajax调用,在Django后端使用这两种方法。 编辑:也许这个问题还不清楚... 如果在IDE中打开一个文件(如Sublime),则可以查看和编辑组成该文件的实际代码。我试图将原始内容放入JSON中,这样我就可以发送到浏览器,修改后再发送回去。 我发布这个问题是因为

  • 问题内容: 我有一个Web脚本,该脚本接受JSON字符串作为通过HTTP POST请求的输入。我碰到了几个相同的AFNetworking 1.x示例,有人可以指点我还是举个AFNetworking 2.0示例向以JSON格式输入的Web脚本发出HTTP POST请求? 谢谢 问题答案: 搜索文档并尝试一些代码后,我以以下示例为例 同样不要忘记在服务器脚本中将响应头类型设置为Application

  • 我正在向JasperReport Server发送rest_v2的JSON数据,以创建或修改用户,Jasper Server页面指示以下结构: 还有其他数据,但由于它们已经对我有效,我没有把它们放在这里,重要的是数组数据,我已经尝试了几种方法,但仍然不适用于我,这是我的代码: 我需要添加角色的主题,有什么帮助吗?

  • 问题内容: 为什么在下面的代码中将数据发送为JSON格式而不是? 问题答案: 因为您既未指定请求内容类型,也未指定正确的JSON请求。这是发送JSON请求的正确方法: 注意事项: 使用此方法将javascript对象转换为本地和内置于现代浏览器中的JSON字符串。如果要支持较旧的浏览器,则可能需要包含json2.js 使用属性指定请求内容类型,以便向服务器指示发送JSON请求的意图 该属性用于服务