Я пытаюсь получить строку JSON в моей реализации graphql, но продолжаю получать ошибки с пользовательским скаляром, который я определил для обработки JSON.
Я определил пользовательский скаляр для правильной сериализации JSON в карту эликсира. Я получаю сообщения об ошибках, которые имеют недопустимые типы данных, прежде чем мой код достигнет стадии синтаксического анализа пользовательского скаляра. Я пытаюсь использовать https://github.com/absinthe-graphql/absinthe/wiki/Scalar-Recipes#json-using-jason для создания скаляра, однако я изменил использование Яда вместо Джейсона.
Мой мутатор абсента использует скалярный тип: json, который я создал.
@desc "Update user"
field :update_user, type: :user do
arg(:email, :string)
arg(:password, :string)
arg(:first_name, :string)
arg(:last_name, :string)
arg(:age, :integer)
arg(:client_store, :json)
resolve(handle_errors(&Resolvers.User_Resolver.update_user/3))
end
Мое скалярное определение и определение схемы graphql
scalar :json, name: "Json" do
description("""
The `Json` scalar type represents arbitrary json string data, represented as UTF-8
character sequences. The Json type is most often used to represent a free-form
human-readable json string.
""")
serialize(&encode/1)
parse(&decode/1)
end
# @spec decode(Absinthe.Blueprint.Input.String.t) :: {:ok, :string} | :error
# @spec decode(Absinthe.Blueprint.Input.Null.t) :: {:ok, nil}
defp decode(%Absinthe.Blueprint.Input.String{value: value}) do
Logger.info "decoded input value:"
case Poison.decode(value) do
{:ok, result} -> {:ok, result}
_ -> :error
end
end
defp decode(%Absinthe.Blueprint.Input.Null{}) do
{:ok, nil}
end
defp decode(_) do
:error
end
defp encode(value), do: value
object :user do
field(:id, :id)
field(:email, :string)
field(:password, :string)
field(:first_name, :string)
field(:last_name, :string)
field(:age, :integer)
field(:client_store, :json)
end
при отправке следующих запросов:
mutation updateUser{
updateUser(client_store: "{"key":"value"}"){
id
}
}
Я получаю syntax error before: \"\\\":\\\"\"
mutation updateUser{
updateUser(client_store: "hello"){
id
}
}
Я получаю "Argument \"client_store\" has invalid value \"hello\"
Отправка запроса GraphQL через модульный тест по Phoenix.ConnTest
query = """
mutation updateUser{
updateUser(client_store: "{\"key\":\"value\"}"){
id
}
}
"""
res =
context.conn
|> put_req_header("content-type", "text")
|> put_req_header("authorization", token)
|> post("/api", query)