In JAX-RS, you can use @QueryParam
annotation to inject URI query parameter into Java method. for example,
/users/query?url=tuts.heomi.net
In above URI pattern, query parameter is “url=tuts.heomi.net“, and you can get the url value with @QueryParam("url")
.
1. @QueryParam example
See a full example of using @QueryParam
in JAX-RS.
import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; @Path("/users") public class UserService { @GET @Path("/query") public Response getUsers( @QueryParam("from") int from, @QueryParam("to") int to, @QueryParam("orderBy") List<String> orderBy) { return Response .status(200) .entity("getUsers is called, from : " + from + ", to : " + to + ", orderBy" + orderBy.toString()).build(); } }
URI Pattern : “users/query?from=100&to=200&orderBy=age&orderBy=name”
getUsers is called, from : 100, to : 200, orderBy[age, name]
Like it ?
@QueryParam will convert the query parameter “orderBy=age&orderBy=name” into
java.util.List
automatically.
2. Programmatic Query Parameter
Alternatively, you can get the query parameters grammatically, via “@Context UriInfo
“. See equivalent version below :
import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @Path("/users") public class UserService { @GET @Path("/query") public Response getUsers(@Context UriInfo info) { String from = info.getQueryParameters().getFirst("from"); String to = info.getQueryParameters().getFirst("to"); List<String> orderBy = info.getQueryParameters().get("orderBy"); return Response .status(200) .entity("getUsers is called, from : " + from + ", to : " + to + ", orderBy" + orderBy.toString()).build(); } }
URI Pattern : “users/query?from=100&to=200&orderBy=age&orderBy=name”
getUsers is called, from : 100, to : 200, orderBy[age, name]
3. @DefaultValue example
@DefaultValue
is good for optional parameter.
import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; @Path("/users") public class UserService { @GET @Path("/query") public Response getUsers( @DefaultValue("1000") @QueryParam("from") int from, @DefaultValue("999")@QueryParam("to") int to, @DefaultValue("name") @QueryParam("orderBy") List<String> orderBy) { return Response .status(200) .entity("getUsers is called, from : " + from + ", to : " + to + ", orderBy" + orderBy.toString()).build(); } }
URI Pattern : “users/query”
getUsers is called, from : 1000, to : 999, orderBy[name]
Download Source Code
$ git clone https://github.com/favtuts/java-jax-rs-tutorials.git
$ cd jax-rs-queryparam-example