2017-10-06 14 views
0

Je fais une requête POST à ​​une API ASP.NET en utilisant Retrofit 2, j'obtiens un HTML en réponse au lieu de JSON. Si je change l'URL cible et appelle une autre API et obtenir une réponse JSONRetrofit 2 renvoie HTML au lieu de JSON

Voici mon interface API

@POST("PosLogin") 
Call<CinekinRequest> login(); 

Rest Directeur

public static final String BASE_URL = "******************"; 

private API homeApi; 

public API getAPi() { 
if (homeApi == null) { 

HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 

logging.setLevel(HttpLoggingInterceptor.Level.BODY); 

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

httpClient.addInterceptor(logging);   
Gson gson = new GsonBuilder() 
.setLenient() 
.create(); 


Retrofit retrofit = new Retrofit.Builder() 
.baseUrl(BASE_URL) 
.addConverterFactory(GsonConverterFactory.create(gson)) 
.client(httpClient.build()) 
.build(); 

homeApi = retrofit.create(API.class); 
       } 
return homeApi; 
      } 

exécution mon login()

public void login(final Context context, CinekinRequest login){ 

Log.e("login", "starting"); 

Call call = manager.getAPi().login(); 
call.enqueue(new Callback<CinekinRequest>() { 

@Override 
public void onResponse(Call<CinekinRequest> call, Response<CinekinRequest> response) { 

Toast.makeText(context, "Success " + response.message(), Toast.LENGTH_SHORT).show(); 
Log.e("res", "success"); 
} 

public void onFailure(Call<CinekinRequest> call, Throwable t) { 
     Toast.makeText(context, "error: " + t.getMessage(), Toast.LENGTH_LONG).show(); 
     Log.e("error", t.getMessage()); 
     } 
     }); 
    } 
+0

Je vous suggère de tester l'API en utilisant quelque chose comme [postier] (https: // www .getpostman.com /) pour voir quel type de réponse est retourné. API ressemble à son ne pas renvoyer json. – mononz

+0

juste vérifier la réponse une fois. Parfois, à cause d'une erreur, vous obtenez une réponse au format HTML. –

+0

Il s'avère que l'API est en fait une API SOAP configurée pour renvoyer JSON. J'avais utilisé Retrofit après m'avoir dit que c'était une API REST. J'ai donc changé mon code et ça marche. Merci tout le monde. –

Répondre

2

S'il vous plaît ajouter la déclaration ci-dessous retrofit onResponse

if (response.isSuccessful()) { 
     // Do something 
    } else { 
     // Do something 
    } 

ou si vous voulez accepter seule réponse 200

if (response.code() == 200) { 
     // Do something 
    } else { 
     // do something 
    } 
+0

Il s'avère que l'API est en réalité une API SOAP configurée pour renvoyer JSON. J'avais utilisé Retrofit après m'avoir dit que c'était une API REST. J'ai donc changé mon code et ça marche. Merci tout le monde. –