REST方法中的参数在改造中未正确处理

时间:2018-09-23 21:54:09

标签: java android rest retrofit

我正在研究连接到REST并调用方法的Android应用。这是Embarcadero REST DataSnap。 当调用如下方法时,使用诸如“ @Query”之类的参数是很好的:

  

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

但是,这里的方法被不同地调用:

  

/ datasnap / rest / some_class / some_method / some_parameter

下面是处理请求正文中的参数的简单类:

public class Dane {
    private int NAGL;

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

例如,当我尝试使用翻新注释@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}

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 :(得分:1)

因此,在改造中,@ Query批注用于查询参数。 它将您的参数添加为查询参数,例如:

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

实际上会产生网址:

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);