Как обрабатывать нулевые значения параметров в Retrofit

Мы переходим с http-клиента Apache на Retrofit и обнаружили несколько пограничных случаев, когда значения параметров могут быть нулевыми.

Раньше Apache перехватывал их и превращал в пустые строки, но Retrofit выдает исключение IllegalArgumentException.

Мы хотим воспроизвести старое поведение, чтобы оно не вызывало непредвиденных проблем в рабочей среде. Есть ли способ заменить эти нулевые значения пустыми строками до того, как ParameterHandler выдаст исключение?


person Christoferson    schedule 14.04.2016    source источник


Ответы (1)


Вы можете попробовать следующее:

Мой веб-сервис (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);
}

Основная активность.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"}
person BNK    schedule 15.04.2016