Scala - 为路径文件中的可选参数传递定义的值

时间:2018-02-28 10:50:36

标签: scala playframework routes custom-routes

所以我有一个路由文件,它调用一个带有几个可选输入的控制器。如下所示

GET      /1.0/*path/documents             
controllers.DocumentController.list(path, format: Option[String], ref: Option[String], build: Option[String], files: Option[String], token: Option[String])

我希望自定义一个URI,该URI会为这些选项传递已定义或提供的值,特别是我希望传递:ref& :从URI构建到下面各自的选项中,而不更改底层控制器或模型调用。

GET      /1.0/*path/documents/:ref.:build         
controllers.DocumentController.list(path, format: Option[String], Some(ref), Some(build), files: Option[String], token: Option[String])

目前上面给出了这个错误。

  

')'期待但是'('发现。

我已经使用scala约3周了,并且在OO或MVC开发方面几乎没有接受过正式培训,所以请放轻松我:)

解决方案:必须定义方法以将这些参数作为函数方法的一部分而不是选项。见下面的答案。

2 个答案:

答案 0 :(得分:1)

我没有与测试时相同的编译错误,但是 1.我认为:ref之后的点未经授权,应该是斜线 2.如果要使用选项,请按以下方式指定:

GET      /path      controllers.DocumentController.list(format: Option[String])

并称之为:

/path?format=myString

答案 1 :(得分:1)

可选参数只能在URL后面的查询选项中提供。以下面的路线为例:

GET      /1.0/*path/documents        
controllers.DocumentController.list(path, format: Option[String], Option[ref], Option[build], files: Option[String], token: Option[String])

可以使用?之后附加到URI的查询来提供这些参数。

例如:

http://localhost:9000/1.0/pathvariable/documents?format=json&ref=master

如果所需的自定义路线是:

GET      /1.0/*path/documents/:ref.:build

然后refbuild变量不应定义为选项,而应定义为必须提供的常规输入参数。

下面的示例列表2是一个采用3个参数的新方法以及一些可选参数:

GET      /1.0/*path/documents/:ref.:build
controllers.DocumentController.list2(path, ref: String, build: String, format: Option[String], files: Option[String], token: Option[String])