2017-07-31 2 views
1

Dans mon projet actuel, j'ai quelques questions sur les « et « = » symboles à l'URL.Rénovation avec caractères spéciaux à url

http://mysampledomain.com/login?q= « userlogin »= » échantillon »

J'ai tout essayé. "@Path" ne fonctionne pas et quand j'essaye "@Query" les caractères "=" et "" 'sont changés en ASCII et cela ne fonctionne pas.

http://mysampledomain.com/login?q%3D%userlogin%27=%22sample%22

Comment pourrais-je faire ce genre de demandes?

Merci!

+0

Il y a quelques conventions que vous devez respecter . Votre URL finale doit être sous la forme suivante: 'http: //mysampledomain.com/login? Userlogin = sample & param2 = valeur2' (vous pouvez ajouter ou supprimer des paramètres selon vos besoins) – MatPag

+0

Vous voulez faire une demande GET via Retrofit? –

+0

Oui, je sais, mais l'arrière a été développé de cette façon et il ne peut pas être changé. Y a-t-il un moyen de faire fonctionner le retrofit avec ces services? – asanchezyu

Répondre

1

J'ai trouvé la solution.

pour tous ceux que cela pourrait aider, j'ai utilisé l'annotation @url comme ceci:

@GET 
Call<ApiResponseModel> getUserDetails(@Header("Authorization") String token, @Url String fullUrl); 

Merci pour toutes les personnes qui ont réponse à ma question :)

1

Normalement, les paramètres via url sont passés de manière différente. Dans votre cas, il serait:

http://mysampledomain.com/login?userlogin=sample&otherVariable=otherValue

Sans '' caractères généralement.

Par exemple, j'utilise Node.js donc ce serait:

app.get('/login', function(req, res) { 
var userLogin = req.query.userLogin; 
var otherVariable = req.query.otherVariable; 

// Do whatever you want. 
}); 
+0

Oui, je sais que presque tous les services ne fonctionnent pas avec ce modèle, mais je dois faire fonctionner mon application avec ce genre de services. :( – asanchezyu

0

Vérifiez votre URL api si votre api comme

http://mysampledomain.com/login?userlogin=sample&otherVariable=otherValue 

puis

@GET("login") 
    Observable<LoginResponse> getUserProductViewed(@Query("userlogin") String userlogin,@Query("otherVariable")String otherVariable); 

et URL de base comme:

public static String BASE_URL = "http://mysampledomain.com/"; 
+0

Le problème est que l'URL doit citation et symbole égal comme ceci: http://mysampledomain.com/login?q='userlogin'="sample " Mon API a besoin de ce modèle et je ne suis pas capable pour le résoudre. – asanchezyu

+0

peut-être que l'URL de cette API est erronée –

1

Utilisez cette approche

public static final String BASE_URL + "http://mysampledomain.com/"; 

public interface RetrofitClient{ 

    @GET("login") 
    Call<String> login(@QueryMap Map<String, String> map); 

} 

appeler cette

Map<String, String> map = new HashMap<>(); 
map.put("userlogin", "sample"); 
map.put("param2", "param2"); 

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

Gson gson = new GsonBuilder() 
    .setLenient() 
    .create(); 

Retrofit r = new Retrofit.Builder() 
     .baseUrl(BASE_URL) 
     .addConverterFactory(ScalarsConverterFactory.create()) 
     .addConverterFactory(GsonConverterFactory.create(gson)) 
     .client(okBuilder.build()) 
     .build(); 

r.create(RetrofitClient.class).login(map).enqueue(this);