users@jersey.java.net

[Jersey] A way to have extended WADL parameters and get them UriInfo.getQueryParameters?

From: Jason Erickson <jerickson_at_factorlab.com>
Date: Mon, 10 Jan 2011 17:26:50 -0800

I have some web services that require quite a few options for query parameters. Rather than have a long list of @QueryParam parameters and then manually setting them to a criteria object I've created, I thought I would use UriInfo and get the MultivaluedMap from getQueryParameters, then pass that MultivaluedMap to a constructor (or a setter) for my criteria object.

So here's a concrete example. In my old method:

@GET
public Item[] getItems(@QueryParam String regionCode, @QueryParam String customerCode, @QueryParam Integer pageSize, @QueryParam Integer page) {
        ItemCriteria criteria = new ItemCriteria();
        criteria.setRegionCode(regionCode);
        criteria.setCustomerCode(customerCode);
        criteria.setPageSize(pageSize);
        criteria.setPage(page);
        return itemDao.getItemsByCriteria(criteria);
}

Replace that with:
@GET
public Item[] getItems(@Context UriInfo ui) {
        ItemCriteria criteria = new ItemCriteria(ui.getQueryParameters());
        return itemDao.getItemsByCriteria(criteria);
}

It works great, and I can do a lot with unit tests that I would have otherwise probably had to do with integration tests. The problem is that I don't get to use @param javadoc comments to produce my extended WADL anymore. I can just manually format all of the expected parameters, but is there a way to do this that I'm missing?