Parameters Dropwizard资源和可选列表参数

Parameters Dropwizard资源和可选列表参数,parameters,resources,optional,dropwizard,Parameters,Resources,Optional,Dropwizard,我正在开发一个TestDropWizard web服务,用作电话簿(基于 我有一个ContactResource类,它具有用于索引联系人的标准路由: @Path("/contacts") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class ContactResource { private final ContactDao contactDao; pub

我正在开发一个TestDropWizard web服务,用作电话簿(基于

我有一个ContactResource类,它具有用于索引联系人的标准路由:

@Path("/contacts")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ContactResource {
    private final ContactDao contactDao;

    public ContactResource(DBI jdbi) {
        contactDao = jdbi.onDemand(ContactDao.class);
    }

    @GET
    public Response indexContacts(@QueryParam("ids") Optional<List<Integer>> ids) {
        List<Contact> contacts;

        contacts = contactDao.indexContacts(ids);

        return Response.status(Response.Status.OK).entity(contacts).build();
    }
}
这是可行的,但我可以看到,如果我必须实现多个过滤器(即,可以选择按姓氏、姓氏或国籍过滤联系人),这种情况很快就会失控


一般来说,在Dropwizard/JDBI中实现任意数量可选筛选器的首选方法是什么?

Jersey不知道如何处理
可选的
参数。除非注册了其他参数,否则它只处理

不过,在这种情况下,我认为您甚至不需要
可选的
,因为您可以通过
列表
免费获得它。如果没有指定的
id
查询参数,则Jersey将生成一个空的
列表
,您可以使用
id.isEmpty()
来测试是否需要任何过滤

@GET
public Response indexContacts(@QueryParam("ids") List<Integer> ids) {
    List<Contact> contacts;

    if(ids.isEmpty()) {
        contacts = contactDao.indexContacts();
    } else {
        contacts = contactDao.filterContactsByIds(ids);
    }

    return Response.status(Response.Status.OK).entity(contacts).build();
}