Validating JAX-RS Query Parameters
This quick and simple guide will walk you through the steps to validate JAX-RS query parameters using filters, including their creation and enforcement.
Join the DZone community and get the full member experience.
Join For FreeIt’s easy to validate parameters in JAX-RS using filters – ContainerRequestFilter
to be specific. There are other options at your disposal, e.g. using (CDI or EJB) interceptors, or injecting (HttpServletRequest
using @Context
)
Scenario: Validate Query Parameter Passed in by the Caller
Steps
- Implement filter
- Extracts query parameter from
ContainerRequestContext
- Performs the validation – aborts the request with an appropriate response status (and the error message)
@Provider
@QueryParamValidator
public class JAXRSReqFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
MultivaluedMap < String, String > queryParameters = requestContext.getUriInfo().getQueryParameters();
String queryParam = queryParameters.keySet().stream().findFirst().get();
System.out.println("Query param - " + queryParam);
if (!queryParam.equals("p")) {
requestContext.abortWith(Response
.status(Response.Status.BAD_REQUEST)
.entity("Invalid Query Param " + queryParam)
.build());
}
}
}
Enforce Filter
- Use
@NameBinding
to decorate custom annotation - Use the custom annotation on the JAX-RS method
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface QueryParamValidator {
}
@Path("test")
public class TestResource {
@GET
@QueryParamValidator
public String test(@QueryParam("p") String p){
return "Param "+ p + " on " + new Date();
}
}
Further Reading
- My eBook: REST assured with JAX-RS
- This JAX-RS 2.0 article in the Java Magazine
Cheers!
Published at DZone with permission of Abhishek Gupta, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments