gpt4 book ai didi

java - 使用 @Body 的 Retrofit POST 请求返回空响应正文

转载 作者:行者123 更新时间:2023-12-02 01:30:22 26 4
gpt4 key购买 nike

我正在尝试将数据发送到具有如下端点的服务器:
https://api.test.com/sales/taken?key=1a2b3c&sales_number=abc&taken[0][id_product]=123&taken[0][qty]=123&taken[1][id_product]=123&taken[1][数量]=123

根据Android Retrofit POST ArrayList ,发送列表的最佳方法是使用 @Body 而不是 @Field。所以我做了一个模型来适应这样的终点:

public class Model {

@SerializedName("key")
private String key;

@SerializedName("sales_number")
private String sales_number;

@SerializedName("taken")
private List<Taken> taken;

public String getKey() {
return key;
}

public void setKey(String key) {
this.key = key;
}

public String getSales_number() {
return sales_number;
}

public void setSales_number(String sales_number) {
this.sales_number = sales_number;
}

public List<NotaAmbilDetailModel> getTaken() {
return taken;
}

public void setTaken(List<NotaAmbilDetailModel> taken) {
this.taken = taken;
}
}

public class Taken {

@SerializedName("id_product")
private int id_product;

@SerializedName("qty")
private int qty;

public int getId_product() {
return id_product;
}

public void setId_product(int id_product) {
this.id_product = id_product;
}

public int getQty() {
return qty;
}

public void setQty(int qty) {
this.qty = qty;
}
}

我的帖子界面如下所示:

@POST("/sales/taken")
Call<ResponseModel> sendData(@Body Model model);

响应状态为:
响应{protocol=h2,code=200,message=,url=https://api.test.com/sales/taken}

如您所见,响应代码为 200,但是当我尝试获取响应正文时,发生了 java.lang.NullPointerException

我的错误日志是:

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String ResponseModel.getCode()' on a null object reference
D/Response: LOG: Response{protocol=h2, code=200, message=, url=https://api.test.com/sales/taken}
Response Body: ResponseModel@bb5e4cf

最佳答案

您的 api 请求需要查询参数而不是请求正文。

尝试这样

请求

@POST("/sales/taken")
Call<ResponseModel> sendData(@QueryMap Map<String, String> queryMap);

api 参数

Map<String, String> queryMap = new HashMap<>();
queryMap.put("key", "value_for_key");
queryMap.put("sales_number", "value_for_sales_number");
queryMap.put("taken[0][id_product]", "value_for_taken[0][id_product]");
queryMap.put("taken[0][qty]", "value_for_taken[0][qty]");
queryMap.put("taken[1][id_product]", "value_for_taken[1][id_product]");
queryMap.put("taken[1][qty]", "value_for_taken[1][qty]");
....

关于java - 使用 @Body 的 Retrofit POST 请求返回空响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56181347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com