Доступ к массиву байтов тела запроса является простым, если при определении действия использовать подходящие синтаксические анализаторы тела, например request.body.asRaw...
.Как получить доступ к телу запроса [_] как массив байтов
Однако, сейчас я создаю ActionBuilder
для HMAC-обеспеченных действий, где доступ к телу неизбежен. Проблема в том, что определение ActionBuilders является родовым по типу запроса и, таким образом, также парсера тела:
def invokeBlock[A](request: Request[A], block: HmacRequest[A] => Future[SimpleResult])
Как A
не имеет каких-либо ограничений типа, как представляется, не будет каким-либо образом чтобы получить доступ к органу запроса с Request[_]
.
В моем конкретном случае, это будет работать, чтобы сделать что-то вроде:
request.body.asInstanceOf[AnyContentAsJson].json.toString()...
, но это не является приемлемым решением для меня.
Я также попытался определить пользовательский парсер тела и применить его к Request[_]
, но результаты оказались пустыми.
Как получить доступ к телу Request[_]
(достаточно представить представление массива байтов)?
Update: было бы также приемлемым решением, если я могу получить доступ к телу запроса внутри ActionBuilder
, например, пути обертывания всей обработки в другом действии, что делает пользовательский разборе. Но я не вижу, как это будет работать ... Решение должно быть повторно использовано в том смысле, что любые пользовательские действия могут использоваться вместе с функциональностью HMAC, не мешая какой-либо логике пользователя.
Если мне нужно написать 'Action (parse.hmacParser) {...', это не было бы приемлемым решением для меня, поскольку это явно ограничивает повторное использование. Если бы было возможно иметь «ActionBuilder», который использует свой собственный «BodyParser» внутри себя и каким-то образом подвергает анализируемым данным, но вызывает завернутое «действие» с оригинальным парсером тела, что было бы приемлемым. Но я не понимаю, как это будет возможно. – Leo
Если у вас есть hmacParser (parse.actualParser), я думаю, вы могли бы создать конструктор действий или вспомогательные методы, чтобы получить что-то вроде HmacProtected (parse.actualParser) {... – johanandren
Кроме того, вы можете переопределить composeParser при создании ActionBuilder и обернуть фактический синтаксический анализатор с вашим синтаксическим анализатором hmac. – johanandren