在play框架中创建两个或多个具有相同URL的API

时间:2016-10-11 14:16:08

标签: scala api playframework playframework-2.0

我有一个用例,我需要从查询字符串中读取值。 目前我有两个不同的API(其他人创建了代码),它们映射到同一个URL

GET  /service/class/:className/details  controllers.Student.getStudentDetails(studentId)
GET  /service/class/:className/details  controllers.Student.getAllStudentsDetails()

如果URL中存在查询字符串,则应执行API1,否则执行API2。

由于两个API的URL相同,因此我只能点击get-student-details API(因为它在路径文件中具有更高的优先级)。 我正在寻找解决这个问题的替代方案。

据我所知,我们不需要创建不同的API来处理查询字符串。 我想在单个API中合并两个不同的API,这取决于请求中是否存在查询字符串。

我想知道的是,是否有办法执行两个映射到相同URL的不同API(仅与查询字符串不同)。

注意:我正在使用play 2.4.6。

1 个答案:

答案 0 :(得分:1)

我看到使用单个控制器功能的方法很少(比方说我们选择了getStudentDetails

1)拥有Option参数:

  def getStudentDetails(studentId: Option[String]) = Action { studentId match {
      case Some(id) => // do something
      case None => // do something else
    }
    // ..
  }

2)在http请求中查找您的查询字符串参数:

  def getStudentDetails = Action { request =>
    request.queryString.get("studentId") match {
        case Some(list) => // do something...beware this is a List
        case None => // do something else
    }
    //...
  }