无法在改造中发送原始json

时间:2017-03-26 11:51:46

标签: android json retrofit2

我一直在尝试使用改装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);

我知道添加了相关部分,其他服务正常工作,问题是参数。在响应服务器给出一个空值异常意义,参数是他们没有拿起值。真的很感激一些帮助。

1 个答案:

答案 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);

希望这会对你有所帮助。