改造2 @path vs @query


74

我是Retrofit 2库的新手。我读了几篇入门的文章,并设法从RESTful API中获取XML数据而未指定参数。生成XML资源的方法如下。

@GET
@Path("/foods")
@Produces(MediaType.APPLICATION_XML)
public List<FoodPyramid> getFoodPyramid() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    trans = session.beginTransaction();
    List<FoodPyramid> foodList = session.createQuery("from FoodPyramid").list();
    try {
        trans.commit();
        session.close();
    } catch (Exception e) {
        session.close();
        System.err.println("Food Pyramid fetch " + e);
    }
    System.err.println("Am in the food modal. . . . . . . .");
    return foodList;
}

现在,当我尝试在界面中传递参数时

@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);  

它无法运行,客户端未接收到任何数据。我花了一个星期的时间来尝试修复它,尽管通过使用非参数调用获取了资源。因此尝试将其更改为:

@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);  

而且效果很好。所以我的问题是:何时需要在翻新2中使用@Query@Path注释?

Answers:


196

考虑这是URL:

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

现在是电话:

@GET("/api/searchtypes/{Id}/filters")
Call<FilterResponse> getFilterList(
          @Path("Id") long customerId,
          @Query("Type") String responseType,
          @Query("SearchText") String searchText
);

因此,我们有:

www.app.net/api/searchtypes/{Path}/filters?Type={Query}&SearchText={Query}

之后发生的事情通常是查询。


感谢您的启发,这应该是正确的答案
Tommy Chong

也帮助了我很多!查询和路径之间有区别
Hardy

那么这个网址是什么意思?并在url type = {query}中,但在@query(“ type”)sting responsetype中,那么如何在此url中插入=符号?我对此问题感到困惑
Adnan haider

23

例如:

@GET("/user/{username}?type={admin}")

usernamepath变量,type是查询变量

@GET("/user/{username}?type={admin}")
void getUserOuth(@Path("username") String username, @Query("type") String type)

@Paul也让我尝试一下。谢谢
Mwesigye John Bosco

1
不要求它是类型,而不是管理员@Query参数?如:void getUserOuth(@Path("username") String username, @Query("type") String type)
dazed'n'confused

4

@Query

  • 此注释表示将与网络请求一起发送的任何查询键值对

@Path

  • 此批注暗示传递的参数将在端点路径中交换

3

@Path注释用于按您自己的方式对参数进行排序。并在url中定义顺序。

@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);

@Query注释参数的自动顺序,并添加了包含“?”的网址 符号。

   @GET("user")
    Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);

2

查询用于URL参数,并且@Query(“ password”)的URL应该是:

user/john?password=****

路径用于替换路径中定义的项目,例如

user/{username}

1

如果您的网址在反斜杠后具有'/'动态值,则使用@Path 。例如“ http://google.com/index.html/userid。因此,在该网址中/ userid是动态的,因此您可以访问该网址请求应该为@Get(“ index.html / {userid}”)Calldata(@Path(“ userid”)int id);

如果您的网址中带有“?”,则使用@Query 问号后的动态值。示例“ http://google.com/index.html?userid。因此在此url中,userid是动态的,因此要访问此URL,您的请求应为@Get(“ index.html”)Calldata (@Query(“ userid”)int id);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.