我正在尝试进行改造,以使用REST API将Gson的自定义json数据解析到本地服务器。
这是生成的json即时消息正在寻找:
{
"user_id": 2,
"product": {
"id": 15,
"item_count": 99
}
}
下面是我创建的界面
public interface APIService {
@POST("/products")
@FormUrlEncoded
Call<Product> savePost(@Header("Token")String authKey,
@Field("product") Object product,
@Field("userId") String userId);
}
这是用于发送数据的功能
// string that i use to call the classes
String userID;
String authKey;
mAPIService = ApiUtils.getAPIService();
mProduct = new Product();
mProduct.setId(productID);
mProduct.setItemCount(numberOfItems.getText().toString().trim());
final String stringMProduct = mProduct.toString();
sendPost(userID, stringMProduct, authKey);
// the function that parses all the data
public void sendPost( String userID, String product, String authKey ) {
mAPIService.savePost(authKey, userID, product).enqueue(new Callback<Product>() {
@Override
public void onResponse(Call<Product> call, retrofit2.Response<Product> response) {
if(response.isSuccessful()) {
showResponse(response.body().toString());
Log.i(TAG, "post submitted to API." + response.body().toString());
}
}
@Override
public void onFailure(Call<Product> call, Throwable t) {
Log.e(TAG, "Unable to submit post to API.");
}
});
}
这是使用Gson将数据解析为json的类
public class OrderRequest {
@SerializedName("product")
@Expose
private Product product;
@SerializedName("user_id")
@Expose
private String userId;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@Override
public String toString() {
return "OrderRequest{" +
"product=" + product +
", userId='" + userId + '\'' +
'}';
}
}
另一个Gcode类。
Public class Product {
@SerializedName("item_count")
@Expose
private String itemCount;
@SerializedName("id")
@Expose
private String id;
public String getItemCount() {
return itemCount;
}
public void setItemCount(String itemCount) {
this.itemCount = itemCount;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Product{" +
"itemCount='" + itemCount + '\'' +
", id='" + id + '\'' +
'}';
}
}
这是我用来将数据解析到服务器的所有代码,我真的很困惑应该如何调试它或有效负载在哪里,我知道这是一个代码转储,这是不允许的。我最困惑的一点是让costom post请求可以在数组中放置数组的位
答案 0 :(得分:0)
对于数组和其他类型的数据,您可以在requestBody内发送数据,在服务器端,您可以轻松地将其映射到要创建的POJO类到POJO类,这与要发送的POJO类相同。
答案 1 :(得分:0)
例如,您要改写的url设置是什么?您似乎将其设置为类似“ .. http://something.com/something”。改型要求您使用的网址应以“ /”结尾。我可以告诉您,因为您的发布方法是“ / products”。那么,如果您正确设置了网址,则该网址应为“ http://something.com/something//products”
不仅如此。 @formURLEncoded不能与post方法一起使用。并使用@field将也应该使用。.