In JAX-RS, you can use @QueryParam annotation to inject URI query parameter into Java method. for example,

/users/query?url=mkyong.com

In above URI pattern, query parameter is “url=mkyong.com“, 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.Listautomatically.

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

Download it – JAX-RS-QueryParam-Example.zip (6 KB)