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!
Database
Published at DZone with permission of Abhishek Gupta, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments