代码之家  ›  专栏  ›  技术社区  ›  Blankman

限制JSON端点中返回的字段

  •  0
  • Blankman  · 技术社区  · 5 年前

    我有一个端点,我想允许调用者限制JSON结果中返回的字段数量。

    case class User(id: Int, p1: String, p2: String, p3: Int, p4: Boolean, ...)
    

    控制器操作如下:

     def index() = Action { implicit request: Request[AnyContent] =>
        val user = userService.get(...)
        Ok(user)
      }
    

    所以说端点可以这样调用:

    /user/123
    /user/123?fields=p1,p3
    

    由于我有一个用户案例类,我如何能够根据调用者想要返回的内容以动态的方式操纵结果集?

    0 回复  |  直到 5 年前
        1
  •  1
  •   cchantep    5 年前

    只需过滤JSON字段:

    case class Lorem(foo: String, bar: Int)
    
    implicit val format: OFormat[Lorem] = Json.format
    
    val fields = List("foo")
    
    Ok(JsObject(
      Json.toJsObject(Lorem("str", 2)).value.filterKeys(fields.contains)))
    
    //{"foo":"str"}
    
    推荐文章