Scala — передача определенных значений для необязательных параметров в файле маршрутов

Итак, у меня есть файл маршрутов, который вызывает контроллер с несколькими дополнительными входами. как показано ниже

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, который будет передавать определенные или предоставленные значения для этих параметров, в частности, я хочу передать :ref & :build из 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, поэтому, пожалуйста, будьте со мной полегче :)

РЕШЕНИЕ: Метод должен быть определен таким образом, чтобы эти параметры принимались как часть метода функции, а не как опции. см. ответ ниже.


person Atreus    schedule 28.02.2018    source источник


Ответы (2)


У меня не такая ошибка компиляции, как у вас при тестировании, но
1. Я думаю, что точка после :ref не разрешена и должна быть косой чертой.
2. Если вы хотите использовать опцию, укажите это так:

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

И назовите это так:

/path?format=myString
person Simon    schedule 28.02.2018
comment
Приносим извинения, так что :ref.:build выше является частью системы управления версиями, т.е. URL будет иметь вид /1.0/documents/v3.1.1, где v3.1 — это параметр ref, а 1 — параметр сборки. Могу ли я указать маршрут, подобный этому (замена . на другой символ в порядке), или я ограничен использованием синтаксиса запроса, подобного тому, что вы указали выше, для дополнительных входных данных? - person Atreus; 28.02.2018
comment
Вы можете смешать их следующим образом: GET /path/:ref controllers.DocumentController.list(ref: String, format: Option[String]) и вызвать его как /path/myRef?format=myString - person Simon; 28.02.2018
comment
хорошо, поэтому я могу получить доступ к таким параметрам, как этот: /path/myRef?format=myString&build=myBuild, но не каким-то другим способом, подобным этому /path/myRef.myString.myBuild ? - person Atreus; 28.02.2018
comment
Нет, я почти уверен, что это невозможно - person Simon; 28.02.2018
comment
Вы можете принять мой ответ, если ответ вас удовлетворит;) - person Simon; 28.02.2018

Необязательные аргументы могут быть предоставлены только с параметром запроса после 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

Тогда переменные ref и build должны быть определены не как опции, а как обычные входные параметры, которые должны быть предоставлены.

Ниже приведен пример, где список 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])
person Atreus    schedule 03.05.2018