我正在使用Retrofit 2,我需要发送请求正文。问题在于将值转换为字符串。在下面的示例中,您可以看到应该分别为数组和数字的items
和totalPrice
转换为字符串。
{ cashierId: 'fff7079c-3fc2-453e-99eb-287521feee63',
items: '[{"amount":3,"id":"602a79e3-b4c1-4161-a082-92202f92d1d6","name":"Play Station Portable","price":1500000.0}]',
paymentMethod: 'Debt',
totalPrice: '4500000.0' }
所需的请求正文是
{ cashierId: 'fff7079c-3fc2-453e-99eb-287521feee63',
items: [{"amount":3,"id":"602a79e3-b4c1-4161-a082-92202f92d1d6","name":"Play Station Portable","price":1500000.0}],
paymentMethod: 'Debt',
totalPrice: 4500000.0 }
这是服务
@POST("api/sales")
@FormUrlEncoded
Call<Sale> createSale(
@FieldMap Map<String, Object> fields
);
这就是我所说的createSale
Map<String, Object> fields = new HashMap<>();
fields.put("cashierId", UUID.fromString("fff7079c-3fc2-453e-99eb-287521feeaaa"));
fields.put("totalPrice", totalPrice);
fields.put("paymentMethod", paymentMethod);
fields.put("items", jsonArray);
Call<Sale> call = retailService.createSale(fields);
是否可以将这些值作为数字和数组而不是作为字符串发送?
答案 0 :(得分:1)
由于您使用的是@FormUrlEncoded
,因此转换肯定会发生。
根据{{3}}:
字段名称和值在按照RFC-3986进行URI编码之前将先经过UTF-8编码。
一种解决方案是使用模型类而不是Map
。我看到您已经有一个销售班。如果看起来像这样:
public class Sale {
String cashierId;
int totalPrice;
String paymentMethod;
ArrayList<SomeObject> items;
}
您可以简单地这样做:
// in service
@POST("api/sales")
Call<Sale> createSale(@Body Sale sale);
// when doing the call
Sale sale = new Sale();
// set everything in your object
// then
Call<Sale> call = retailService.createSale(sale);