I am trying to create a custom directive that do some transform/validation on input type in GraphQL DGS in Java Spring Boot
Here is how I declare my custom directive
directive @trim on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
type Subscriber {
id: ID
name: String @trim
email: String @trim
}
input SubscriberInput {
name: String @trim
email: String @trim
}
Thing working fine for @trim
on type Subscriber
as I declare @DgsDirective(name = "trim")
in my code
@DgsDirective(name = "trim")
public class TrimDirective implements SchemaDirectiveWiring {
@Override
public GraphQLFieldDefinition onField(SchemaDirectiveWiringEnvironment<GraphQLFieldDefinition> env) {
GraphQLObjectType fieldsContainer = (GraphQLObjectType) env.getFieldsContainer();
GraphQLFieldDefinition fieldDefinition = env.getFieldDefinition();
DataFetcher<?> originalDataFetcher = env.getCodeRegistry().getDataFetcher(fieldsContainer, fieldDefinition);
DataFetcher<?> dataFetcher = DataFetcherFactories.wrapDataFetcher(
originalDataFetcher,
(dataFetchingEnvironment, value) -> {
if (value instanceof String) {
return ((String) value).trim();
}
return value;
});
env.getCodeRegistry().dataFetcher(fieldsContainer, fieldDefinition, dataFetcher);
return fieldDefinition;
}
}
However when I try to override onInputObjectField
for input type SubscriberInput
it is not working as env.getFieldsContainer()
and env.getFieldDefinition()
return null
.
How can I achieve same result as onField
with onInputObjectField
. Thanks.