我一直在尝试使用改装2发送原始json但是没有工作,我尝试了JsonObject,地图但它根本不工作。我不明白问题所在。在邮差上工作正常。 我正在尝试发送此请求:
{
"incomes":[{"amount":"5566","incomeId":"345"}]
}
我的android代码是:
@Headers({"Accept: application/json"})
@POST("/api/v1/addIncome")
Call<ResponseBody> addIncome(@Body Map<String, String> params);
Map<String, String> params = new HashMap<>();
Call<ResponseBody> req = null;
Income[] incomes = new Income[1];
incomes[0] = income;
params.put(URLParam.INCOMES, new Gson().toJson(incomes));
req = CustomUtil.getCuumiAPIObject(this, URLConstant.BASE_URL).addIncome(params);
我知道添加了相关部分,其他服务正常工作,问题是参数。在响应服务器给出一个空值异常意义,参数是他们没有拿起值。真的很感激一些帮助。
答案 0 :(得分:0)
发送字符串映射时,您需要使用 @FieldMap
而不是字符串映射将其发送为@Body
。
在代码中使用@FiledMap
,如下所示:
@FieldMap Map<String, String> params
修改强>
如果你想用@Body
发送你的json,你需要通过在pojo类中设置你的值来发送pojo类作为@Body
。
Pojo课程:
public class Incomes {
@SerializedName("incomes")
@Expose
private List<Income> incomes = null;
public List<Income> getIncomes() {
return incomes;
}
public void setIncomes(List<Income> incomes) {
this.incomes = incomes;
}
public class Income {
@SerializedName("amount")
@Expose
private String amount;
@SerializedName("incomeId")
@Expose
private String incomeId;
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getIncomeId() {
return incomeId;
}
public void setIncomeId(String incomeId) {
this.incomeId = incomeId;
}
}
}
然后你需要创建Incomes
类的对象,并且需要在income
类的创建对象中设置每个Incomes
。
Incomes incomes=new Incomes();
Incomes.Income mIncome=new Incomes().new Income();
mIncome=income;
incomes.setIncomes(mIncome);
然后在您的API请求中将Incomes
类对象发送为@Body
。
req = CustomUtil.getCuumiAPIObject(this, URLConstant.BASE_URL).addIncome(incomes);
您还需要更改addIncome
方法,如下所示:
Call<ResponseBody> addIncome(@Body Incomes incomes);
希望这会对你有所帮助。