Когда request.attrs.get в пользовательском фильтре Scala Play вернет None? - PullRequest
1 голос
/ 04 мая 2020

В ответе на вопрос «Как запустить фильтр по требованию scala play framework» предлагается следующий код:

// in your filter
val handlerDef: Option[HandlerDef] = request.attrs.get(Router.Attrs.HandlerDef)

Я не уверен, что здесь происходит - безопасно ли .get на этом валу (вывести его из Опциона)? В каком сценарии ios этот код приведет к None (ie, когда Router.Attrs.HandlerDef не будет присутствовать)?

Я работаю с Scala и PlayFramework 2.6.

1 Ответ

1 голос
/ 04 мая 2020

Согласно тегам модификатора маршрута

Обратите внимание, что атрибут запроса HandlerDef существует только при использовании маршрутизатора, сгенерированного Play из файла routes. Этот атрибут не добавляется, когда маршруты определены в коде, например, с использованием Scala SIRD или Java RoutingDsl. В этом случае request.attrs.get(HandlerDef) вернет None в Scala или null в Java. Помните об этом при создании фильтров.

Следовательно, если вы используете файл routes, тогда Router.Attrs.HandlerDef всегда должен быть доступен. В качестве сокращения вместо

val handlerDef: HandlerDef = request.attrs.get(Router.Attrs.HandlerDef).get

вы можете использовать apply сахар, например,

val handlerDef: HandlerDef = request.attrs(Router.Attrs.HandlerDef)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...