Пользовательский graphQL скаляр LocalDateTime - PullRequest
0 голосов
/ 20 апреля 2020

Я использую graphql-spring-boot-starter для создания GraphQL API. AFAIK там не существует скаляра LocalDateTime по умолчанию, поэтому я хотел бы создать свой кастом. Я попытался сделать это следующим образом:

 @Bean
public GraphQLScalarType dateTimeType() {
    return new GraphQLScalarType("LocalDateTime", "DataTime scalar", new Coercing() {
        @Override
        public String serialize(Object input) {
            LocalDateTime date = (LocalDateTime) input;
            return   date.toString();
        }

        @Override
        public LocalDateTime parseValue(Object input) {
            return LocalDateTime.parse((String) input);
        }

        @Override
        public LocalDateTime parseLiteral(Object input) {
            return LocalDateTime.parse((String) input);
        }
    });

}

Я получил исключение:

java .lang.IllegalArgumentException: Невозможно создать экземпляр java.time.LocalDateTime (без создателей, как по умолчанию, существовать): невозможно десериализовать из значения объекта (без создателя на основе делегатов или свойств)

Не могли бы вы рассказать, как я могу работать с dateTime в моем проекте?

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете попробовать плагины com.graphql- java -generator maven или gradle. Они генерируют POJO и служебные классы из схемы GraphQL, чтобы позволить вам выполнить запрос GraphQL из вашего java кода:

https://github.com/graphql-java-generator/graphql-maven-plugin-project

https://github.com/graphql-java-generator/graphql-gradle-plugin-project

С этим плагином гораздо проще создать сервер GraphQL в java. Это облегчает использование библиотеки graphql- java, генерируя весь шаблонный код.

Итак, с ее помощью легко создать сервер GraphQL.

Если вы просто хотите чтобы повторно использовать реализацию DateTime, которую он содержит, вы можете просмотреть его исходный код:

https://github.com/graphql-java-generator/graphql-maven-plugin-project/blob/master/graphql-java-runtime/src/main/java/com/graphql_java_generator/customscalars/GraphQLScalarTypeDateTime.java

Etienne

...