Параметр в методе REST неправильно обрабатывается в Retrofit - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю над приложением Android, которое подключается к REST и вызывает метод.Это Embarcadero REST DataSnap.Использование таких параметров, как "@Query", полезно, когда вы вызываете такой метод:

www.app.net / api / searchtypes / 862189 / filters? Type = 6 & SearchText = School

Однако здесь методы вызываются по-разному:

/ datasnap / rest / some_class / some_method / some_parameter

Ниже приведен простой класс для обработки параметра, который идет в запросе.body:

public class Dane {
    private int NAGL;

    public Dane(int NAGL) {
        this.NAGL = NAGL;
    }
}

Когда я пытаюсь использовать аннотацию Retrofit @Query, например:

 @POST("datasnap/rest/TstBaseMethods/%22SelectSQL%22/{aSelectSQL}")   
Call<Logowanie> selectSQL(@Header("Authorization") String credentials,@Body Dane json,@Query("aSelectSQL") String aSelectSQL);

String dane = Credentials.basic("admin","admin");  
Dane json = new Dane(11101); 


Call<Logowanie> sql = gerritAPI.selectSQL(dane,json,"select n.datadok from nagl n where n.id_nagl =:NAGL");

и запускаю приложение, я вижу в журналах

TstBaseMethods.SelectSQL: {aSelectSQL} << {"NAGL": 11101} </p>

Содержимое aSelectSQL не отправляется на сервер.Я уже заметил, что если я жестко закодировал контент в URL и вызвал его, как показано ниже, он работает:

@POST("datasnap/rest/TstBaseMethods/%22SelectSQL%22/select%20n.datadok%20from%20nagl%20n%20where%20n.id_nagl%3D%3Anagl")
 Call<Logowanie> selectSQL(@Header("Authorization") String credentials,@Body Dane json);  

Можно ли как-нибудь правильно передать содержимое параметра на сервер?Не будет хорошо жестко закодировать все параметры в URL.

1 Ответ

0 голосов
/ 24 сентября 2018

Итак, при модификации аннотация @Query используется для параметра запроса.Он добавит ваш параметр в качестве параметра запроса, например:

@GET("/api/somePath")
Call<JSONObject> getSomething(@Query("foo") String foo);
...
service.getSomething("bar")

Фактически приведет к URL:

https://yoursite.com/api/somePath?foo=bar

Здесь, в вашем случае, вы используете {} внутриURL-адрес, который указывает на то, что вы добавляете параметр пути.Итак, ваш пост должен быть таким

@POST("datasnap/rest/TstBaseMethods/%22SelectSQL%22/{aSelectSQL}") 
Call<Logowanie> selectSQL(@Header("Authorization") String credentials,@Body Dane json,@Path("aSelectSQL") String aSelectSQL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...