Class GenerateServerCodeExtension
- All Implemented Interfaces:
com.graphql_java_generator.plugin.conf.CommonConfiguration,com.graphql_java_generator.plugin.conf.GenerateCodeCommonConfiguration,com.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
- Direct Known Subclasses:
GraphQLExtension
-
Field Summary
FieldsModifier and TypeFieldDescriptionbooleanIf this parameter is set to true, the spring GraphQL controller methods will be annotated with the@BatchMapping(instead of the@SchemaMapping).boolean(only for server mode, since 2.5) Defines if a data fetcher is needed for every GraphQL field that has input argument, and add them in the generated POJOs.This parameter marks a list of GraphQL mappings as ignored, so that they are not generated by the plugin.The javaTypeForIDType is the java class that is used in the generated code for GraphQL fields that are of the GraphQL ID type.Fields inherited from class com.graphql_java_generator.gradleplugin.GenerateCodeCommonExtension
targetResourceFolder, targetSourceFolder, useJakartaEE9Fields inherited from class com.graphql_java_generator.gradleplugin.CommonExtension
projectLayoutFields inherited from interface com.graphql_java_generator.plugin.conf.CommonConfiguration
DEFAULT_ADD_RELAY_CONNECTIONS, DEFAULT_JSON_GRAPHQL_SCHEMA_FILE, DEFAULT_MAX_TOKENS, DEFAULT_PACKAGE_NAME, DEFAULT_PREFIX, DEFAULT_SCHEMA_FILE_FOLDER, DEFAULT_SCHEMA_FILE_PATTERN, DEFAULT_SCHEMA_SUB_FOLDER, DEFAULT_SKIP_GENERATION_IF_SCHEMA_HAS_NOT_CHANGED, DEFAULT_SUFFIX, DEFAULT_TARGET_SCHEMA_SUBFOLDERFields inherited from interface com.graphql_java_generator.plugin.conf.GenerateCodeCommonConfiguration
DEFAULT_COPY_RUNTIME_SOURCES, DEFAULT_QUERY_MUTATION_EXECUTION_PROTOCOL, DEFAULT_SCHEMA_PERSONALIZATION_FILE, DEFAULT_SEPARATE_UTIL_CLASSES, DEFAULT_SOURCE_ENCODING, DEFAULT_SPRING_BEAN_SUFFIX, DEFAULT_TARGET_RESOURCE_FOLDER, DEFAULT_TARGET_SOURCE_FOLDER, DEFAULT_USE_JAKARTA_EE9Fields inherited from interface com.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
DEFAULT_BATCH_MAPPING_DATA_FETCHER_RETURN_TYPE, DEFAULT_BATCH_MAPPING_DATA_FETCHER_RETURN_TYPE_STR, DEFAULT_GENERATE_BATCH_LOADER_ENVIRONMENT, DEFAULT_GENERATE_BATCH_MAPPING_DATA_FETCHERS, DEFAULT_GENERATE_DATA_FETCHER_FOR_EVERY_FIELD_WITH_ARGUMENT, DEFAULT_GENERATE_DATA_LOADER_FOR_LISTS, DEFAULT_GENERATE_JPA_ANNOTATION, DEFAULT_IGNORED_SPRING_MAPPINGS, DEFAULT_JAVA_TYPE_FOR_ID_TYPE, DEFAULT_SCAN_BASE_PACKAGES -
Constructor Summary
ConstructorsConstructorDescriptionGenerateServerCodeExtension(org.gradle.api.file.ProjectLayout projectLayout, com.graphql_java_generator.plugin.conf.Packaging packaging) -
Method Summary
Modifier and TypeMethodDescriptioncom.graphql_java_generator.plugin.conf.BatchMappingDataFetcherReturnTypecom.graphql_java_generator.plugin.conf.PluginModegetMode()The mode is forced toPluginMode.servercom.graphql_java_generator.plugin.conf.PackagingbooleanbooleanbooleanbooleanbooleanvoidsetBatchMappingDataFetcherReturnType(com.graphql_java_generator.plugin.conf.BatchMappingDataFetcherReturnType batchMappingDataFetcherReturnType) voidsetGenerateBatchLoaderEnvironment(boolean generateBatchLoaderEnvironment) voidsetGenerateBatchMappingDataFetchers(boolean generateBatchMappingDataFetchers) voidsetGenerateDataFetcherForEveryFieldsWithArguments(boolean generateDataFetcherForEveryFieldsWithArguments) final voidsetGenerateDataLoaderForLists(boolean generateDataLoaderForLists) voidsetGenerateJPAAnnotation(boolean generateJPAAnnotation) final voidsetIgnoredSpringMappings(String ignoredSpringMappings) voidsetJavaTypeForIDType(String javaTypeForIDType) voidsetScanBasePackages(String scanBasePackages) Methods inherited from class com.graphql_java_generator.gradleplugin.GenerateCodeCommonExtension
getCustomScalars, getPackageName, getQueryMutationExecutionProtocol, getSchemaPersonalizationFile, getSourceEncoding, getSpringBeanSuffix, getTargetClassFolder, getTargetResourceFolder, getTargetSourceFolder, isCopyRuntimeSources, isSeparateUtilityClasses, isUseJakartaEE9, setCopyRuntimeSources, setCustomScalars, setPackageName, setQueryMutationExecutionProtocol, setSchemaPersonalizationFile, setSeparateUtilityClasses, setSourceEncoding, setSpringBeanSuffix, setTargetResourceFolder, setTargetSourceFolder, setUseJakartaEE9Methods inherited from class com.graphql_java_generator.gradleplugin.CommonExtension
getEnumPrefix, getEnumSuffix, getInputPrefix, getInputSuffix, getInterfacePrefix, getInterfaceSuffix, getJsonGraphqlSchemaFilename, getMaxTokens, getProjectBuildDir, getProjectDir, getProjectMainSourceFolder, getSchemaFileFolder, getSchemaFilePattern, getTargetSchemaSubFolder, getTemplates, getTypePrefix, getTypeSuffix, getUnionPrefix, getUnionSuffix, isAddRelayConnections, isInitialized, isSkipGenerationIfSchemaHasNotChanged, logConfiguration, setAddRelayConnections, setEnumPrefix, setEnumSuffix, setInitialized, setInputPrefix, setInputSuffix, setInterfacePrefix, setInterfaceSuffix, setJsonGraphqlSchemaFilename, setMaxTokens, setSchemaFileFolder, setSchemaFilePattern, setSkipGenerationIfSchemaHasNotChanged, setTargetSchemaSubFolder, setTemplates, setTypePrefix, setTypeSuffix, setUnionPrefix, setUnionSuffixMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.graphql_java_generator.plugin.conf.CommonConfiguration
getDefaultTargetSchemaFileName, getEnumPrefix, getEnumSuffix, getInputPrefix, getInputSuffix, getInterfacePrefix, getInterfaceSuffix, getJsonGraphqlSchemaFilename, getMaxTokens, getProjectBuildDir, getProjectDir, getProjectMainSourceFolder, getSchemaFileFolder, getSchemaFilePattern, getTargetSchemaSubFolder, getTemplates, getTypePrefix, getTypeSuffix, getUnionPrefix, getUnionSuffix, isAddRelayConnections, isSkipGenerationIfSchemaHasNotChanged, logCommonConfigurationMethods inherited from interface com.graphql_java_generator.plugin.conf.GenerateCodeCommonConfiguration
getCustomScalars, getPackageName, getQueryMutationExecutionProtocol, getSchemaPersonalizationFile, getSourceEncoding, getSpringAutoConfigurationPackage, getSpringBeanSuffix, getTargetClassFolder, getTargetResourceFolder, getTargetSourceFolder, isCopyRuntimeSources, isGenerateUtilityClasses, isSeparateUtilityClasses, isUseJakartaEE9, logGenerateCodeCommonConfigurationMethods inherited from interface com.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
isGenerateJacksonAnnotations, logConfiguration, logGenerateServerCodeConfiguration
-
Field Details
-
generateBatchMappingDataFetchers
public boolean generateBatchMappingDataFetchersIf this parameter is set to true, the spring GraphQL controller methods will be annotated with the
@BatchMapping(instead of the@SchemaMapping). This allows to manage the of the N+1 select problem: so this allows much better performances, by highly diminishing the number of executed requests (avoid to execute several times the same "sub-query")
When setting this parameter to true, the main changes are:- The
@BatchMappingannotation may be applied to all data fetchers without argument(s) that return either a List, a Type, an Interface or an Union. - The return type must be defined in the controller: it may not be `Object`, as spring-graphql builds the
proper BatchLoader while loading the controllers, when the server starts. The return type for this method is
managed by the
batchMappingMethodReturnTypeplugin parameter - DataLoader is managed transparently by spring (instead of having to declare it in the generated controller, and having it as a parameter in the generated data fetchers)
- The batch mapping is generalized on all data fetchers
- The
DataFetchersDelegatemethod's signature changes - The
generateBatchLoaderEnvironment,generateDataFetcherForEveryFieldsWithArgumentsandgenerateDataLoaderForListsplugin parameters are ignored
A typical method signature for a data fetcher would be as below, where the return type is controller by the
batchMappingMethodReturnTypeplugin parameter :public Flux
topics(// BatchLoaderEnvironment batchLoaderEnvironment, // GraphQLContext graphQLContext, // List boards); Please note that the
@BatchMappingannotation is a shortcut to avoid boilerplate code, for the most common cases. See this discussion for more information on this. For most complex cases, the use of a DataLoader is recommended by the spring-graphql case. And in these cases, the plugin will generate a method with the@SchemaMappingannotation - The
-
generateDataFetcherForEveryFieldsWithArguments
public boolean generateDataFetcherForEveryFieldsWithArguments(only for server mode, since 2.5) Defines if a data fetcher is needed for every GraphQL field that has input argument, and add them in the generated POJOs. This allows a better compatibility with spring-graphql, and an easy access to the field's parameters.
With this argument to false, the data fetchers are generated only for field which type is a type (not a scalar or an enum), and for the query, mutation and subscription types.
With this argument to true, the data fetchers are generated for all GraphQL fields which type is a type (not a scalar or an enum) or that has one or arguments
This parameter is available since version 2.5. Its default value is false in 2.x versions for backward compatibility with existing implementations based on the plugin. But the recommended value is true.
-
ignoredSpringMappings
This parameter marks a list of GraphQL mappings as ignored, so that they are not generated by the plugin. These ignored mappings can then be defined by the specific implementation.
The other way to it is to create a spring GraphQL Controller, that overrides the controller generated by the plugin. But this may lead to this error:
Ambiguous mapping. Cannot map 'xxxController' method [...] to 'Type.field': there is already 'yyy' bean method [...] mapped.The parameter may contain:
- The '*' character: this would mark all controllers and DataFetchersDeleagate to be ignored. That is: none would be generated, and it's up to the specific implementation to manage them. In this mode, you still benefit of the POJO generation, the type wiring, the custom scalars mapping...
- A list of:
- GraphQL type name: The full controller class for this type is ignored, and won't be generated
- GraphQL type's field name: The method in the controller of this type, for this field, is ignored, and won't
be generated. The field must be written like this:
{type name}.{field name}
The accepted separators for the values are: comma, space, carriage return, end of line, space, tabulation. At least one separator must exist between two values in the list. Here is a sample:
Type1, Type2.field1 Type3 Type4.field2 For field mapping, there must be no separator other than '.' between the type name and the field name. For instance, the following type declaration are invalid: 'type .field', 'type. field'
To implement the ignored mappings, you'll have to follow the [spring-graphql documentation](https://docs.spring.io/spring-graphql/reference/controllers.html).
-
javaTypeForIDType
The javaTypeForIDType is the java class that is used in the generated code for GraphQL fields that are of the GraphQL ID type. The default value is java.util.UUID. Valid values are: java.lang.String, java.lang.Long and java.util.UUID.
This parameter is only valid for the server mode. When generating the client code, the ID is always generated as a String type, as recommended in the GraphQL doc.
In other words: when in server mode and javaTypeForIDType is not set, all GraphQL ID fields are UUID attributes in java. When in server mode and javaTypeForIDType is set to the X type, all GraphQL ID fields are X attributes in java.
Note: you can override this, by using the schema personalization capability. For more information, please have a look at the Schema Personalization doc page.
-
-
Constructor Details
-
GenerateServerCodeExtension
public GenerateServerCodeExtension(org.gradle.api.file.ProjectLayout projectLayout, com.graphql_java_generator.plugin.conf.Packaging packaging)
-
-
Method Details
-
isGenerateBatchLoaderEnvironment
public boolean isGenerateBatchLoaderEnvironment()- Specified by:
isGenerateBatchLoaderEnvironmentin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setGenerateBatchLoaderEnvironment
public void setGenerateBatchLoaderEnvironment(boolean generateBatchLoaderEnvironment) -
isGenerateBatchMappingDataFetchers
public boolean isGenerateBatchMappingDataFetchers()- Specified by:
isGenerateBatchMappingDataFetchersin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setGenerateBatchMappingDataFetchers
public void setGenerateBatchMappingDataFetchers(boolean generateBatchMappingDataFetchers) -
isGenerateDataFetcherForEveryFieldsWithArguments
public boolean isGenerateDataFetcherForEveryFieldsWithArguments()- Specified by:
isGenerateDataFetcherForEveryFieldsWithArgumentsin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setGenerateDataFetcherForEveryFieldsWithArguments
public void setGenerateDataFetcherForEveryFieldsWithArguments(boolean generateDataFetcherForEveryFieldsWithArguments) -
isGenerateJPAAnnotation
public boolean isGenerateJPAAnnotation()- Specified by:
isGenerateJPAAnnotationin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setGenerateJPAAnnotation
public void setGenerateJPAAnnotation(boolean generateJPAAnnotation) -
isGenerateDataLoaderForLists
public boolean isGenerateDataLoaderForLists()- Specified by:
isGenerateDataLoaderForListsin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setGenerateDataLoaderForLists
public final void setGenerateDataLoaderForLists(boolean generateDataLoaderForLists) -
getBatchMappingDataFetcherReturnType
public com.graphql_java_generator.plugin.conf.BatchMappingDataFetcherReturnType getBatchMappingDataFetcherReturnType()- Specified by:
getBatchMappingDataFetcherReturnTypein interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setBatchMappingDataFetcherReturnType
public void setBatchMappingDataFetcherReturnType(com.graphql_java_generator.plugin.conf.BatchMappingDataFetcherReturnType batchMappingDataFetcherReturnType) -
getIgnoredSpringMappings
- Specified by:
getIgnoredSpringMappingsin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setIgnoredSpringMappings
-
getJavaTypeForIDType
- Specified by:
getJavaTypeForIDTypein interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setJavaTypeForIDType
-
getMode
public com.graphql_java_generator.plugin.conf.PluginMode getMode()The mode is forced toPluginMode.server- Specified by:
getModein interfacecom.graphql_java_generator.plugin.conf.GenerateCodeCommonConfiguration- Overrides:
getModein classGenerateCodeCommonExtension
-
getPackaging
public com.graphql_java_generator.plugin.conf.Packaging getPackaging()- Specified by:
getPackagingin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
getQuotedScanBasePackages
- Specified by:
getQuotedScanBasePackagesin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
getScanBasePackages
- Specified by:
getScanBasePackagesin interfacecom.graphql_java_generator.plugin.conf.GenerateServerCodeConfiguration
-
setScanBasePackages
-