Для этого вызова функции:Как пройти Любой объект как Json Записываемый в Scala?
fakeRequest(controllers.routes.GPInviteService.invite, Json.toJson(i))
, который определяется как:
def fakeRequest(target:() => Call, json: JsValue): Any
Я хотел бы, чтобы упростить код вызова, и устранить необходимость создания объекта JSON. Таким образом, вызов стал бы:
fakeRequest(controllers.routes.GPInviteService.invite, i)
И функция стали бы тогда:
def fakeRequest(target:() => Call, i: Any): Any = {
route(FakeRequest(target()).withJsonBody(Json.toJson(i))) match {
^
...
Но это заставляет меня ошибку компиляции, потому что toJson() хочет Пишет [A] типа. Я недостаточно знаком с Scala и библиотекой Json, чтобы выяснить, как я могу передать по существу любой объект для i, учитывая, что он должен реализовывать неявные Writes. (Я пробовал пройти i: Writes
, но это не работает).
Не может работать, потому что 'Any' не имеет любую полезную информацию о типе. Как насчет параметризации 'fakeRequest'? например. 'def fakeRequest [A] (target:() => Call, i: A) (неявный w: Writes [A]): A = ???' –
Я не понимаю этот синтаксис ... но после Немного возиться, я получил его на работу. Я отправлю свой ответ ниже. – Zac
Кто-то избил меня. '(Неявный w: Writes [A]): A = ???' не работает, но я думаю, возможно, вы не имели в виду буквально включить «???» а скорее моя функция. Но это сработало: 'def fakeRequest [A] (target:() => Call, i: A) (неявный w: Записывает [A]): Any = {...}' так что спасибо! Лучшие оценки для @ daniel-c-sobral для ясности и простоты. – Zac