希望有人能帮助我。
我尝试使用 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;
}
}
主要事件的一部分:
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)
最佳答案
我也遇到了同样的问题。根本原因是我使用了不兼容的库。
这个组合对我有用:
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.0.0-beta4</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version>2.0.0-beta4</version>
</dependency>
关于post - Retrofit 2.0 无法将请求正文转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35768656/