Основная проблема видна в вашей сущности: переменные, закодированные в JSON, не соответствуют ожидаемым сервером.
В настоящее время у вас есть:
"origin": {
"StringValue": {
"value": "EARTH"
}
}
и вы должно иметь только:
"origin": "EARTH"
Это значение равно InputValue
в Caliban, и Caliban предоставляет Encoder
для Circe. Однако вы, похоже, используете авто-деривацию Circe generi c, которая не получает Encoder
от Caliban, а вместо этого пытается получить InputValue
самостоятельно, что дает неверный результат.
Я рекомендую использовать полу -автоматическое получение в circe-generi c или даже использование circe-дифференцирования, которое правильно подберет Encoder
Caliban. Пример с circe-generi c:
val req = GraphQLRequest(
"""query($origin: String){
| characters(origin: $origin) {
| name
| nicknames
| origin
| }
|}""".stripMargin,
None,
Some(Map("origin" -> StringValue("EARTH")))
)
import io.circe.syntax._
import io.circe.generic.semiauto._
implicit val enc = deriveEncoder[GraphQLRequest]
println(req.asJson)
дает ожидаемое JSON:
{
"query" : "query($origin: String){\n characters(origin: $origin) {\n name\n nicknames\n origin\n }\n}",
"operationName" : null,
"variables" : {
"origin" : "EARTH"
}
}