2013-10-11 2 views
2

Я хочу быть в состоянии иметь это:Маршруты перегрузкой не работает

POST /items controllers.Application.update() 
POST /items/:itemType controllers.Application.update(itemType: String) 
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int) 

но не компилируется из-за ошибки method update is defined twice. Тогда я изменил его, и это не компилятор либо:

POST /items controllers.Application.update(itemType: Option[String] = None, id: Option[Int] = None) 
POST /items/:itemType controllers.Application.update(itemType: String, id: Option[Int] = None) 
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int) 

ошибки являются:

  1. предыдущий один
  2. и type mismatch; found: Option[String]; required: String

Что мне делать по этому поводу? Я не хотел бы сделать что-то вроде этого:

POST /items controllers.Application.updateAll() 
POST /items/:itemType controllers.Application.updateByType(itemType: String) 
POST /items/:itemType/:id controllers.Application.updateByTypeAndId(itemType: String, id: Int) 

и это не хорошо выглядеть либо, так как я хотел бы использовать Option вместо пустой строки:

POST /items controllers.Application.update(itemType: String = "", id: Int = "") 
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int = "") 
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int) 

ответ

1

К сожалению, похоже, что опция Option была удалена в версии v2 - см., Например, here - так что вы можете зацикливаться либо на кодировке своего собственного PathBindable, чтобы обрабатывать параметры (как указано в приведенной выше ссылке), либо один из других сомнительных вариантов, которые у вас есть отметил.

+0

Могу ли я использовать параметры с URL-адреса определенного типа? '(itemType: MyClass1, id: MyClass2)' –

+0

Извините, я никогда не занимался этим сам, поэтому не мог сказать. – Shadowlands

1

Если вы можете изменить свой формат URL, у вас есть возможность использовать опцию.

Маршрут: POST /items controllers.Application.update(itemType: Option[String], id: Option[Int])

URL: http://localhost:9000/items?itemType=someItem&id=123

С помощью этого формата, вы можете опустить ItemType, идентификатор или как при выполнении вызова веб-службы.

+0

Я хочу, чтобы там было «/», а не «?». –

+0

Я понимаю. Это намного чище. Я хотел представить вариант, если вы (или другие, кто ищет решение в будущем), должны/должны использовать опции. –

Смежные вопросы