2016-04-14 2 views
0

Wir gehen vom Apache-HTTP-Client zu Retrofit und haben einige Randfälle gefunden, in denen Param-Werte null sein können.Umgang mit Null-Param-Werten in Retrofit

Apache verwendet, um diese abzufangen und sie in leere Zeichenfolgen zu verwandeln, aber Retrofit wirft eine IllegalArgumentException.

Wir möchten das alte Verhalten replizieren, so dass es keine unerwarteten Probleme in der Produktion verursacht. Gibt es eine Möglichkeit für mich, diese Nullwerte durch leere Strings zu ersetzen, bevor ParameterHandler eine Ausnahme auslöst?

Antwort

0

können Sie versuchen, die folgenden:

Meine Web-Service (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-Client:

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 Ausgang:

Wenn service.getOptional(null);

04-15 13:56:56.173 13484-13484/com.example.asyncretrofit I/AsyncRetrofit: {"Code":200,"Message":"Response Message"} 

mit der Wenn service.getOptional("240780");

04-15 13:57:56.378 13484-13484/com.example.asyncretrofit I/AsyncRetrofit: {"Code":200,"Message":"240780"} 
mit