Parameters Dropwizard资源和可选列表参数
我正在开发一个TestDropWizard web服务,用作电话簿(基于 我有一个ContactResource类,它具有用于索引联系人的标准路由: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
@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();
}