In the web service I'm working on, I need to implement a URI with query parameters which look like /stats?store=A&store=B&item=C&item=D
To break it down, I need to be able to use query parameters to specify data from multiple/all stores and data for multiple/all items from those stores. So far I have been able to implement one query argument just fine in order to pull item data, but I'm lost as far as to how to implement more queries, and can't seem to find the resources I had seen before which deal with this implementation.
What I have so far in my method is along the lines of
@GET @Path("stats") public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final String item) { /**Run data using item as variable**/ return someStringOfData }
which works well for one item, and will return all data if I don't type the parameter in the URI. However, I am unsure how to handle any more parameters than this.
Update:
I have figured out how to use 2 different parameters by simply adding a second argument to the method like so:
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store, @DefaultValue("All") @QueryParam(value = "item") final String item)
The question remains of how to implement multiple values of the same parameter.
@PUT @Path("{user}/{directory:. +}") public Response doshare(@PathParam("user")String name, @PathParam("directory")String dir, @QueryParam("name")String sharename, @QueryParam("type")String type){ mongoDAOImpl impl=new mongoDAOImpl(); Mongo mongo=impl. getConnection("127.0. 0.1","27017"); DB db=impl.
This is not a standard, you can use anyone for designing restful api. However, the commonly used convention is : Any required or mandatory attributes should be added as path param. Any optional attributes should be added as query param.
If you change the type of your item
method parameter from String
to a collection such as List<String>
, you should get a collection that holds all the values you are looking for.
@GET @Path("/foo") @Produces("text/plain") public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final List<String> item) { return "values are " + item; }
The JAX-RS specification (section 3.2) says the following regarding the @QueryParam
annotation:
The following types are supported:
- Primitive Types
- Types that have a constructor that accepts a single
String
argument.- Types that have a static method named
valueOf
with a singleString
argument.List<T>
,Set<T>
, orSortedSet<T>
whereT
satisfies 2 or 3 above.
List<String> items=ui.getQueryParameters().get("item");
where ui
is declared as a member in the rest resource like so :
@Context UriInfo ui;
the downside is that it doesn't appear in the methods arguments at all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With