'retrofit 2 @path Vs @query
I am new to retrofit 2 library.I read several articles to get started as a beginner and I managed to fetch XML data from my RESTful API without specifying parameters.In my method that generated the XML resource is below.
@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;
}
Now when I tried to pass parameter in the interface
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
It failed to run,no data was receive by a client . It took me a week trying to fix it though by using a non parameter call fetched the resources; So tried to change it to:
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);
and it worked fine. So My question is: When do I need to use @Query
and @Path
Annotation in retrofit 2?
Solution 1:[1]
Consider this is the url:
www.app.net/api/searchtypes/862189/filters?Type=6&SearchText=School
Now this is the call:
@GET("/api/searchtypes/{Id}/filters")
Call<FilterResponse> getFilterList(
@Path("Id") long customerId,
@Query("Type") String responseType,
@Query("SearchText") String searchText
);
So we have:
www.app.net/api/searchtypes/{Path}/filters?Type={Query}&SearchText={Query}
Things that come after the ? are usually queries.
Solution 2:[2]
For example:
@GET("/user/{username}?type={admin}")
Here username
is the path
variable, and type
is the query variable
@GET("/user/{username}?type={admin}")
void getUserOuth(@Path("username") String username, @Query("type") String type)
Solution 3:[3]
@Query
- This annotation represents any query key value pair to be sent along with the network request
@Path
- This annotation implies that the passed parameter will be swapped in the endpoint path
Solution 4:[4]
Kotlin Answer
For example, geting specific post from list with post id:
@GET("Posts/{post_id}")
suspend fun getPost(@Path("post_id") postId: String): Response<Post>
Note: In this example, Post is my data model class.
Solution 5:[5]
@Path annotation use for ordering parameters as your own way. And defined the order in url.
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);
@Query annotation auto order of parameters and added with url including "?" symbol.
@GET("user")
Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
Solution 6:[6]
@Path is used when you have url which has '/' dynamic value after a backword slash.Example "http://google.com/index.html/userid. So in this url /userid is dynamic so to access this url your request should be @Get("index.html/{userid}") Calldata(@Path("userid")int id);
@Query is used when you have a url which has '?' dynamic value after a question mark.Example "http://google.com/index.html?userid.So in this url ? userid is dynamic so to access this url your request should be @Get("index.html") Calldata(@Query("userid")int id);
Solution 7:[7]
Path is use to replace item defined in your path, like
@POST("setting/update_notification_status/{c_notification_id}")
Call<JsonObject> updateNotificationStatus(@Header("Sessionkey") String token, @Path("c_notification_id") String c_notification_id );
Solution 8:[8]
Query is use for URL parameters and with @Query("password") the URL should be :
user/john?password=****
Path is use to replace item defined in your path, like
user/{username}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Morteza Jalambadani |
Solution 2 | |
Solution 3 | skillsmuggler |
Solution 4 | |
Solution 5 | Majedur |
Solution 6 | Malti Devnani |
Solution 7 | Mukesh Kumar Patel |
Solution 8 | Johann67 |