当前位置: 首页 > 知识库问答 >
问题:

Dropw的资源和可选的列表参数

蒯翰墨
2023-03-14

我正在开发一个测试DropWizard网络服务,旨在充当电话簿(基于这本Packt Publishing书籍。

我有一个 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();
    }
}

如上面的代码所示,我希望索引操作可以选择按id过滤结果(当发送id列表时)。当我不发送id参数时,我想获取所有联系人。

遗憾的是,该服务因以下错误而拒绝启动:

[[致命]未找到public javax.ws.rs.core类型参数的注入源。在索引0处响应com.dwbook.phonebook.resources.ContactResource.indexContacts(com.google.common.base.Optional)。

如果我删除<code>可选

如何定义可选

提前谢谢!

编辑:基于康迪特的回答,我这样重构了这个动作:

@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();
}

这是可行的,但我可以看到这很快失控的情况下,我必须实现多个过滤器(即,可选地过滤联系人的名字,lastName,或国籍)。

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


共有1个答案

吕永嘉
2023-03-14
匿名用户

Jersey不知道如何处理可选参数。它只处理默认实体类型,除非其他实体已注册。

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

 类似资料:
  • 问题内容: Swift中的函数是否可以具有参数?我正在尝试这样做: …但是当我尝试调用它并通过时,它给了我一个奇怪的编译错误: 我不明白为什么我的类已经被声明为可选的,所以必须遵循某些特殊的协议。 问题答案: 它不会编译,因为该函数需要引用,但是您通过了。这个问题与可选无关。 通过用声明参数意味着您将在函数体内为其分配一些值。如何分配价值? 你需要这样称呼它 如果您了解C ,则这是代码的C 版本,

  • 阅读使用的所有优点,但是,如果我们想在查询参数使用此属性时拥有可选参数,它不起作用。它仍然将所有参数验证为强制性的。知道如何使其可选吗? 执行此代码时,它始终需要 。没有此参数,它不会运行。 编辑:即使传递了id的默认值,它也不起作用。

  • 我想获得在AWS上创建的资源列表,并根据创建日期对它们进行排序。

  • 问题内容: 最近,我与队友讨论了 在方法中使用可选参数的问题。 假设方法是 接受一个和 可选参数 ,它返回该目录中列出的书籍,如果还传递了类别,则仅返回该类别中的书籍。 冲突点是,验证是否为空检查。我认为不应对此进行空检查,因为它是可选参数。函数的调用者可以通过或,并且函数应在实现中处理两种情况。 我的意见是,对于可选参数,只会使方法的约定更加明确。只需查看方法签名即可知道此参数是可选的,不需要读

  • 最近,我和我的队友讨论了在方法中使用作为可选参数。 假设方法是 我的观点是,对于可选参数,只会使方法的契约更加清晰。只要看一下方法签名就可以知道这个参数是可选的,不需要读取JavaDocs。但当他不想使用该可选参数时,不应强制他传递。 我的队友有不同的看法。他希望对其进行空检查,从而强制调用方始终传递。他的观点是为什么我们要通过一个空的可选选项。此外,看起来比更易读。 这个方法在我们的一个库包中,