Как присвоить значение JSONObject полю в файле схемы graphql?

#graphql-java #graphql-schema

#graphql-java #graphql-schema

Вопрос:

Я работаю над приложением с GraphQL и spring boot framework. Здесь я использую подход GraphQL, ориентированный на схему, для записи деталей моей схемы. В моем сценарии мне нужно присвоить JSONObject и JSONArray в качестве входных данных нескольким полям в моем файле схемы. В файле схемы GraphQL мы не можем напрямую задать JSONObject / JSONArray в качестве типов данных. Может кто-нибудь, пожалуйста, подсказать мне, как обращаться с JSONObject / JSONArray в GraphQL?

Ответ №1:

Вы можете определить свой собственный скалярный тип JSON:

 scalar JSON

type Foo {
  field: JSON
}
  

Затем реализуйте новый java GraphQLScalarType bean:

 @Component
public class JSONScalarType extends GraphQLScalarType {

  JSONScalarType() {
    super("JSON", "JSON value", new Coercing<Object,Object>() {
        ...
    });
  }   
}
  

Наконец, реализуйте скалярное принуждение. Вы можете найти учебное пособие по скалярным типам здесь https://www.graphql-java.com/documentation/v15/scalars /

Или, поскольку в graphql JSON является объектом, вы можете взглянуть на то, как в graphql-java-extended-scalars реализованы скаляры Object и JSON : https://github.com/graphql-java/graphql-java-extended-scalars/blob/master/src/main/java/graphql/scalars/object/ObjectScalar.java

Другим решением было бы использовать библиотеку graphql-java-extended-scalars:https://github.com/graphql-java/graphql-java-extended-scalars

Комментарии:

1. Спасибо, Allirion ..! Вы сэкономили мое время, это работает.!

2. @DingThree добро пожаловать! Не могли бы вы сообщить мне, какое решение вы использовали (пользовательский скаляр или использовать расширенную скалярную библиотеку)?

3. Привет, AllirionX — Я создал пользовательский скаляр и сопоставил его с моим файлом схемы. И это сработало отлично.! Спасибо.!

4. У кого-нибудь есть полная реализация вызова, совместное использование будет полезно?