【问题标题】:Custom Response from Controller in FinatraFinatra 中控制器的自定义响应
【发布时间】:2016-05-29 06:51:49
【问题描述】:

在我的应用程序中,我有一个自定义案例类,如下所示,其中包含一堆附加字段。

case class User(id: UUID, username: String, password: String)

现在我的 Finatra 控制器获取服务返回的响应,并发送一个包含密码哈希的 JSON 响应。控制器是最基本的

get("/users") {request: GetUsersRequest =>
    userService.users()
}

所以我的问题是我们如何自定义此响应,以便我可以删除密码字段并添加一些额外的数据。

【问题讨论】:

    标签: scala finatra


    【解决方案1】:

    假设userService.users() 返回用户列表。即List[User] 然后用map 转换响应。

    例如,您可以映射到一个新的案例类。

    case class UserDTO(id: UUID, username: String, comment: String)
    

    如果您还不想使用课程,也可以将map 发送至Tuple

    get("/users") {request: GetUsersRequest =>
        userService.users().map(u => UserDTO(u.id, u.username, "Comment!"))
    }
    

    【讨论】:

    • 所以这行得通。但我想知道是否有更 Scala-y 的方式来做到这一点。由于 Finatra 将 Future[T] 类型的响应隐式转换为 T 的 json 对象,如果我们可以要求它使该 json 对象具有我们想要的字段。
    • 这正是上述答案的作用。特别是当您也要求提供其他信息时。原则上,改变字段集就是改变数据的类型,所以实际上你所做的就是从 Future[T] 到 Future[U]。
    猜你喜欢
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多