jersey does not provide required functionality for checking parameters out of the box. however, you can do something like implementing your own annotation to achieve it. Below is the annotation code:
@Target(value = ElementType.METHOD) @Retention(value = RetentionPolicy.RUNTIME) public @interface Required { String[] value(); }
You also need a filter, below is the code:
public class RequiredParamResourceFilterFactory implements ResourceFilterFactory { @Context private transient HttpServletRequest servletRequest; private class RequiredParamFilter implements ResourceFilter, ContainerRequestFilter { private final String[] requiredParams; protected List<String> parametersValueMissing; private RequiredParamFilter(String[] requiredParams) { this.requiredParams = requiredParams; } @Override public ContainerRequest filter(ContainerRequest containerRequest) { boolean missingMandatoryParameter = false; List<String> missingParameters = new ArrayList<String>(); List<String> requiredParametersValueMissing = new ArrayList<String>(); List<String> URLParameters = getURLParameters(containerRequest.getQueryParameters()); List<String> methodRequiredParameters = Arrays.asList(requiredParams); if (methodRequiredParameters != null) { for (String methodRequiredParam : methodRequiredParameters) { if (URLParameters == null) { missingMandatoryParameter = true;
The example below shows how to use this annotation, so in the webservice below; file_id and count are required parameters:
@GET @Produces(MediaType.APPLICATION_JSON+";charset=utf-8") @Cacheable(isCacheable = true) @Path("posts/clusters") @Required({"file_id","count"}) @Timed public Response getClusters( @QueryParam("file_id") Integer fileId, @QueryParam("count") Integer count, @DefaultValue("-1")@QueryParam("start_time") Long startTime){ ; }
If the required parameters are not specified in the webservice call, you will receive an error, as shown below, indicating parameter names that are missing:
{ message: "Missing Parameters = file_id, count", errorCode: "600" }
Hope this solves your problem.
source share