Я следовал документации здесь https://www.graphql-java.com/documentation/v14/scalars/, но обнаружил следующую ошибку: SchemaProblem {errors = [Тип поля 'Date' отсутствует при разрешении типа 'Book' [@ 5: 1]] }
schema.graphqls
type Query {
bookById(id: ID!): Book
}
type Book {
id: ID
name: String
date: Date
}
Использование graphql- java 14.0
private static GraphQLScalarType DATE_SCALAR = GraphQLScalarType.newScalar().name("Date").coercing(new Coercing<LocalDate, LocalDate>() {
@Override
public LocalDate serialize(Object input) {
return input == null ? null : LocalDate.parse(input.toString());
}
@Override
public LocalDate parseValue(Object input) {
return input == null ? null : LocalDate.parse(input.toString());
}
@Override
public LocalDate parseLiteral(Object input) {
if (input instanceof StringValue) {
try {
return LocalDate.parse(((StringValue) input).getValue());
} catch (DateTimeParseException e) {
throw new CoercingParseLiteralException(e);
}
}
throw new CoercingParseLiteralException();
}
}).build();
public static GraphQL graphQL() {
SchemaParser schemaParser = new SchemaParser();
TypeDefinitionRegistry typeRegistry;
try (InputStream is = MainApplication.class.getClassLoader().getResourceAsStream("schema.graphqls");
Reader reader = new InputStreamReader(is, "utf-8")) {
typeRegistry = schemaParser.parse(reader);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
SchemaGenerator schemaGenerator = new SchemaGenerator();
GraphQLSchema schema = schemaGenerator.makeExecutableSchema(typeRegistry, runtimeWiring());
return GraphQL.newGraphQL(schema).build();
}
private static RuntimeWiring runtimeWiring() {
Builder builder = RuntimeWiring.newRuntimeWiring();
builder.scalar(DATE_SCALAR);
builder.type("Query", typeWiring -> {
typeWiring.dataFetcher("bookById", environment -> Map.of("name", "GraphQL"));
return typeWiring;
});
return builder.build();
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
GraphQL graphQL = graphQL();
ExecutionInput.Builder executionInputBuilder = ExecutionInput.newExecutionInput().query("{ bookById(id: 1) { name } }");
executionInputBuilder.dataLoaderRegistry(new DataLoaderRegistry());
ExecutionInput executionInput = executionInputBuilder.build();
Map<String, Object> result = CompletableFuture.completedFuture(executionInput).thenCompose(graphQL::executeAsync).thenApply(ExecutionResult::toSpecification).get();
System.out.println(result);
}