我是改造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
注释?
答案 0 :(得分:94)
考虑这是网址:
@routes.Application.hello("test")
现在这是电话:
www.app.net/api/searchtypes/862189/filters?Type=6&SearchText=School
所以我们有:
www.app.net/api/searchtypes/的 {路径} 强> /过滤器类型= <强> {查询} 强>&安培; SEARCHTEXT = <强> {查询} 强>
?之后的事情通常是查询。
答案 1 :(得分:17)
例如:
@GET("/user/{username}?type={admin}")
此处username
是path
变量,type
是查询变量
@GET("/user/{username}?type={admin}")
void getUserOuth(@Path("username") String username, @Query("type") String type)
答案 2 :(得分:2)
查询用于URL参数,使用@Query(“password”),URL应为:
user/john?password=****
路径用于替换路径中定义的项目,例如
user/{username}
答案 3 :(得分:1)
当你有一个有'?'的网址时会使用@Query问号后的动态值。例如此网址中的“http://google.com/index.html?userid.So?userid是动态的,因此要访问此网址,您的请求应为 @Get( “index.html的”) Calldata(@Query(“userid”)int id);
答案 4 :(得分:0)
@Path注释用于按您自己的方式对参数进行排序。并在url中定义顺序。
iex(4)> EdtrApi.all
[debug] QUERY OK source="edtrs" db=2.8ms queue=2.0ms
SELECT e0."id", e0."dtr_date", e0."user_id", e0."inserted_at", e0."updated_at" FROM "edtrs" AS e0 []
[
%Myapp.EdtrApi.Edtr{
__meta__: #Ecto.Schema.Metadata<:loaded, "edtrs">,
dtr_date: #DateTime<2018-12-29 16:00:00Z>,
id: 1,
inserted_at: ~N[2018-12-11 09:11:18],
updated_at: ~N[2018-12-11 09:11:18],
user_id: "8189f04b-e3d7-4d17-8df2-fedbeb0399b1"
},
%Myapp.EdtrApi.Edtr{
__meta__: #Ecto.Schema.Metadata<:loaded, "edtrs">,
dtr_date: #DateTime<2018-12-30 16:00:00Z>,
id: 2,
inserted_at: ~N[2018-12-11 09:11:18],
updated_at: ~N[2018-12-11 09:11:18],
user_id: "8189f04b-e3d7-4d17-8df2-fedbeb0399b1"
},
%Myapp.EdtrApi.Edtr{
__meta__: #Ecto.Schema.Metadata<:loaded, "edtrs">,
dtr_date: #DateTime<2018-12-29 16:00:00Z>,
id: 3,
inserted_at: ~N[2018-12-11 09:12:17],
updated_at: ~N[2018-12-11 09:12:17],
user_id: "8189f04b-e3d7-4d17-8df2-fedbeb0399b1"
}
]
iex(5)>
@Query注释参数的自动顺序,并添加包含“?”的网址符号。
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);
答案 5 :(得分:0)
@Query
@Path
答案 6 :(得分:0)
Kotlin 答案
例如 从带有帖子ID的列表中获取特定帖子:
@GET("Posts/{post_id}")
suspend fun getPost(@Path("post_id") postId: String): Response<Post>