2016-05-28 5 views
0

私のアプリでは、以下のような追加のフィールドを持つカスタムケースクラスがあります。Finatraのコントローラからのカスタムレスポンス

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

今私のFinatraコントローラは、サービスによって返された応答をピックアップし、同様にパスワードのハッシュが含まれているJSON応答を送信します。それは私の質問は、私たちは私がパスワードフィールドをドロップし、同様にいくつかの追加データを追加することができるように、この応答をカスタマイズする方法だろう

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

を取得し、コントローラは、などの基本です。

答えて

1

と仮定すると、userService.users()はユーザーのリストを返します。すなわち、List[User]は、mapで応答を変換します。

たとえば、新しいケースクラスにマップすることができます。

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

あなたもmapTupleにあなたはまだクラスを使用したくない場合はすることができます。

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

これは機能します。しかし、これを行うためのより多くのScala-yの方法があるかどうか疑問に思っていました。 FinatraはFuture [T]型の応答を暗黙のうちにTのjsonオブジェクトに変換するので、私たちが望むフィールドでjsonオブジェクトを作成するように要求することができるならば、 – bythe4mile

+1

これはまさに上記の答えがするものです。特にあなたは追加情報も求めていました。原則として、フィールドのセットを変更することはデータのタイプを変更することであり、実際にはFuture [T]からFuture [U]へ行くことになります。 – Det

関連する問題