我正在研究连接到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中的所有参数进行硬编码不是很好。
答案 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);