我有一个用例,我需要从查询字符串中读取值。 目前我有两个不同的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。
答案 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
}
//...
}