有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用喷淋路由访问获取参数的java Scala?

我目前正在开发一个内置于Scala中的应用程序,该应用程序带有喷洒路由

因此,对于通过POST发送的JSON文档,访问主体中的变量非常容易,如下所示:

respondWithMediaType(`application/json`) {
    entity(as[String]) { body =>
        val msg = (parse(body) \ "msg").extract[String]
        val url = (parse(body) \ "url").extractOpt[String]

然而,我现在正试图用GET编写一个额外的查询,在访问随查询发送的参数时遇到了一些问题

所以,我是以

get {
    respondWithMediaType(`application/json`) {
    parameterSeq { params =>
        var paramsList = params.toList

因此,这工作得很好,因为我可以按顺序访问GET参数(仅通过访问索引)——问题是,不幸的是,我认为我们不能期望GET参数总是按正确的顺序发送

列表本身按以下格式打印

List((msg,this is a link to google), (url,http://google.com), (userid,13))

有没有简单的方法可以访问这些参数?例如,沿着以下路线的东西

var message = paramsList['msg']
println(message) //returns "this is a link to google"

还是我完全错了

如果这是一个愚蠢的问题,我深表歉意——我最近才切换到Scala,并且仍然在熟悉它,并且重新熟悉Java


共 (2) 个答案

  1. # 1 楼答案

    要构建路由,可以使用^{}指令。我不确定这是否是您想要的,无论如何,您可以将其用作:

    get {
      parameters('msg) { (msg) =>
        complete(s"The message is '$msg'")
      }
    }
    

    Spray指令可以很容易地组合,因此您可以使用任意方式组合它们

    我希望这对你有帮助

  2. # 2 楼答案

    我通常使用parameters directive将数据解析为包含所有相关数据的case类:

    case class MyParams(msg: String, url: String, userId: Int)
    
    parameters(
      "msg".as[String],
      "url".as[String],
      "userId".as[Int]
    ).as[MyParams] {
      myParams => 
       // Here you have the case class containing all the data, already parsed.
    }