2014-01-23 4 views
1

У меня есть маршрут с участком, как это:спрей маршрутизации доступа к пути URL-адрес

... 
(pathEnd | path("summary")) { 
    parameters(...).as(Query) { query => 
     onSuccess(model ? query) { 
      case MyResponse(list) => 
       // at this point I would like to know if I hit pathEnd or 
       // path(summary) so I can complete with summary or full response. 
       if (???) 
        complete(OK, list) 
       else 
        complete(OK, list map (_.toSummary)) 
     } 
    } 
} 
... 

По сути, есть много параметров пререканий и запросов к модели, которая идентична, но я делаю дополнительное преобразование ответа, чтобы пролить некоторые данные, если удалена итоговая конечная точка. Можно ли это сделать каким-то образом?

Я попытался добавить ctx => после (pathEnd | path("summary")) { ctx =>, но это не сработало. (. Маршрут не соответствует, и никогда не возвращается ничего)

+0

Вы можете использовать директиву 'unmatchedPath', чтобы извлечь оставшийся путь, а затем вызвать' path.isEmpty', чтобы проверить, нет ли чего-то. Это то, что вы ищете? – jrudolph

+0

Я думал об этом, но это делало невозможным иметь другие маршруты по тем же маршрутам, что и после него. –

ответ

1

Я дал этот обычай директиву быстрый тест блока и, кажется, работает:

def pathEndOr(p: String) = 
    pathEnd.hmap(true :: _) | path(p).hmap(false :: _) 

Вы можете использовать его в вас пример, как так:

... 
pathEndOr("summary") { isPathEnd => 
    parameters(...).as(Query) { query => 
     onSuccess(model ? query) { 
      case MyResponse(list) => 
       // at this point I would like to know if I hit pathEnd or 
       // path(summary) so I can complete with summary or full response. 
       if (isPathEnd) 
        complete(OK, list) 
       else 
        complete(OK, list map (_.toSummary)) 
     } 
    } 
} 
... 
+1

PS: Когда вы входите в работу, это на ветке 'stories/pathEndOr' :) – theon

+2

Коллеги, помогающие друг другу через Stack Overflow, просто потрясающие :) –

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