相关疑难解决方法(0)

Play Framework 2.3(Scala)中的自定义JSON验证约束

我设法用自定义约束实现表单验证,但现在我想用JSON数据做同样的事情.

如何将自定义验证规则应用于JSON解析器?

示例:客户端的POST请求包含用户名(username),我不仅要确保此参数是非空文本,还要确保此用户实际存在于数据库中.

// In the controller...

def postNew = Action { implicit request =>
    request.body.asJson.map { json =>
        json.validate[ExampleCaseClass] match {
            case success: JsSuccess[ExampleCaseClass] =>
                val obj: ExampleCaseClass = success.get
                // ...do something with obj...
                Ok("ok")
            case error: JsError =>
                BadRequest(JsError.toFlatJson(error))
        }
    } getOrElse(BadRequest(Json.obj("msg" -> "JSON request expected")))
}


// In ExampleCaseClass.scala...

case class ExampleCaseClass(username: String, somethingElse: String)

object ExampleCaseClass {
    // That's what I would use for a form:
    val userCheck: Mapping[String] = nonEmptyText.verifying(userExistsConstraint)

    implicit val …
Run Code Online (Sandbox Code Playgroud)

validation json scala playframework-2.3 playframework-json

12
推荐指数
1
解决办法
5526
查看次数

重载的方法值[read]无法应用于(String => SearchController.this.TrackSearch)

我正在查询spotify api以获取给定查询的轨道列表ws,当我将JSON数据转换为案例类时,我收到的错误是我还没弄明白...

class SearchController @Inject() (
  val ws: WSClient
    ) extends Controller {

  case class TrackSearch(href: String)

  implicit val trackResultsReads: Reads[TrackSearch] = (
      (__ \ "tracks" \ "href").read[String]
    )(TrackSearch.apply _)

  def index = Action.async { implicit request =>
    search("track", param(request, "q")).map { r =>
       val ts = r.json.as[TrackSearch]
       println(ts)
       Ok
    }
  }

  private def search(category: String, query: String): Future[Try[WSResponse]] = {
    ws.url("https://api.spotify.com/v1/search")
      .withQueryString("q" -> query, "type" -> category)
      .get()
      .map(Success(_))
      .recover { case x => Failure(x) }
  } …
Run Code Online (Sandbox Code Playgroud)

json scala playframework

3
推荐指数
1
解决办法
883
查看次数