我希望有人能幫助我。Retrofit 2.0無法將請求正文轉換爲JSON
我嘗試使用Retrofit 2.0發送帶有JSON正文的POST請求。
接口:
public interface Interface {
@POST(/*path*/)
Call<MyResponseObject> sendInt(@Body MyInteger myInt);
}
MyInteger類:
public class MyInteger {
int id;
public MyInteger(int id) {
this.id = id;
}
}
MainActivity的部分:
private Retrofit mRetrofit = null;
private final Interface mService;
...
...
mRetrofit = new Retrofit.Builder()
.baseUrl(/*URL*/)
.addConverterFactory(GsonConverterFactory.create())
.build();
mService = mRetrofit.create(Interface.class);
召喚:
MyInteger id = new MyInteger(0);
mService.sendInt(id).enqueue(new Callback<MyResponseObject>() {
@Override
public void onResponse(Call<MyResponseObject> call, Response<MyResponseObject> response) {/*Log something*/}
@Override
public void onFailure(Call<MyResponseObject> call, Throwable t) {}
});
在我看來是這樣的例子: https://futurestud.io/blog/retrofit-send-objects-in-request-body
但GsonConverter不能MyInteger轉換成JSON .. 下面是日誌:
java.lang.IllegalArgumentException: Unable to create @Body converter for class com.??.MyInteger (parameter #1)
for method Interface.sendInt
...
...
Caused by: java.lang.IllegalArgumentException: Could not locate RequestBody converter for class com.??.MyInteger.
Tried:
* retrofit2.BuiltInConverters
* retrofit2.GsonConverterFactory
at retrofit2.Retrofit.nextRequestBodyConverter(Retrofit.java:288)
at retrofit2.Retrofit.requestBodyConverter(Retrofit.java:248)
at retrofit2.RequestFactoryParser.parseParameters(RequestFactoryParser.java:491)
我的解決方法是發送改裝的RequestBody對象,而不是我自己的myInteger的對象。 Gson gson = new Gson(); 字符串json = gson.toJson(myIntegerObject); RequestBody requestBody = RequestBody.create(MediaType.parse(「application/json」),josn); – nast
您需要爲MyInteger類生成getter和setter,或者使int id爲public。 – vbp