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

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


person DingThree    schedule 25.08.2020    source источник


Ответы (1)


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

scalar JSON

type Foo {
  field: JSON
}

Затем реализуйте новый Java-компонент GraphQLScalarType:

@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

person AllirionX    schedule 25.08.2020
comment
Спасибо, Аллирион ..! Вы сэкономили мое время, это работает! - person DingThree; 26.08.2020
comment
@DingThree, пожалуйста! Не могли бы вы сообщить мне, какое решение вы использовали (специальный скаляр или библиотеку расширенных скаляров)? - person AllirionX; 27.08.2020
comment
Здравствуйте, AllirionX! Я создал собственный скаляр и сопоставил его с моим файлом схемы. И это сработало отлично.! Спасибо.! - person DingThree; 28.08.2020
comment
У кого-то есть полная реализация звонка, поделится будет полезно? - person Ameya; 03.06.2021