gpt4 book ai didi

java - Retrofit 中未正确处理 REST 方法中的参数

转载 作者:行者123 更新时间:2023-12-02 10:47:00 25 4
gpt4 key购买 nike

我正在开发连接到 REST 并调用方法的 Android 应用程序。这是 Embarcadero REST DataSnap。当您调用这样的方法时,使用像“@Query”这样的参数是很好的:

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

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

/datasnap/rest/some_class/some_method/some_parameter

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

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}

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 中的所有参数进行硬编码并不好。

最佳答案

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

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

实际上会产生网址:

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

在这里,在您的情况下,您在网址内使用 {},这表明您正在添加路径参数。所以你的帖子应该是这样的

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

关于java - Retrofit 中未正确处理 REST 方法中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52470592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com