Scala вывод типа не работает с игрой json - PullRequest
0 голосов
/ 08 апреля 2020

Я пишу http-клиент, и это моя подпись:

def post[Req, Resp](json: Req)(implicit r: Reads[Resp], w: Writes[Req]): Future[Resp]

Использование play json за кадром.

Когда я так его использую

def create(req: ClusterCreateRequest): Future[ClusterCreateResponse] = endpoint.post(req)

Я получаю следующую ошибку

diverging implicit expansion for type play.api.libs.json.Reads[Resp]

Следующие работы

def create(req: ClusterCreateRequest): Future[ClusterCreateResponse] = endpoint.post[ClusterCreateRequest, ClusterCreateResponse](req)

Почему тип вывод не работает, как ожидалось? Что я могу сделать для этого?

1 Ответ

0 голосов
/ 08 апреля 2020

diverging implicit expansion for type play.api.libs.json.Reads[Resp] означает, что Resp имеет несколько JSON сериализаторов, которые не скрываются друг за другом.

Невозможно точно определить root причину проблемы и сказать исправить X, и все будет работать из информации, приведенной в посте.

Но вы можете попытаться «отладить» неявный поиск. Попробуйте проверить неявный порядок поиска: Где Scala ищет имплики? Включение неявного расширения параметров в идее может помочь проверить, какие имплициты (Ctrl + Shift + =) вызывают cla sh.

Общие рекомендации для экземпляров классов типов - держите их организованными и объявленными, помещайте их в сопутствующий объект или в специально выделенный объект.

...