我们正在从Apache的http客户端迁移到Retrofit,我们发现一些边缘情况,其中param值可以为null。
Apache用于拦截这些并将它们变成空字符串,但Retrofit会抛出IllegalArgumentException。
我们希望复制旧的行为,以便它不会在生产中导致任何意外问题。在ParameterHandler抛出异常之前,有没有办法让这些空值与空字符串交换?
答案 0 :(得分:0)
您可以尝试以下操作:
我的网络服务(Asp.Net WebAPI):
[Route("api/values/getoptional")]
public IHttpActionResult GetOptional(string id = null)
{
var response = new
{
Code = 200,
Message = id != null ? id : "Response Message"
};
return Ok(response);
}
Android客户端:
public interface WebAPIService {
...
@GET("/api/values/getoptional")
Call<JsonObject> getOptional(@Query("id") String id);
}
MainActivity.java:
...
Call<JsonObject> jsonObjectCall1 = service.getOptional("240780"); // or service.getOptional(null);
jsonObjectCall1.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
Log.i(LOG_TAG, response.body().toString());
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.e(LOG_TAG, t.toString());
}
});
...
Logcat输出:
如果使用service.getOptional(null);
04-15 13:56:56.173 13484-13484/com.example.asyncretrofit I/AsyncRetrofit: {"Code":200,"Message":"Response Message"}
如果使用service.getOptional("240780");
04-15 13:57:56.378 13484-13484/com.example.asyncretrofit I/AsyncRetrofit: {"Code":200,"Message":"240780"}