Interface Coercing<I,O>

All Known Implementing Classes:
GraphqlBooleanCoercing, GraphqlFloatCoercing, GraphqlIDCoercing, GraphqlIntCoercing, GraphqlStringCoercing

@PublicSpi public interface Coercing<I,O>
The Coercing interface is used by GraphQLScalarTypes to parse and serialize object values.

There are two major responsibilities, result coercion and input coercion.

Result coercion is taking a value from a Java object and coercing it into the constraints of the scalar type. For example imagine a DateTime scalar, the result coercion would need to take an object and turn it into a ISO date or throw an exception if it cant.

Input coercion is made out of three different methods parseLiteral(Object) which converts an literal Ast into an internal input value, parseValue(Object) which converts an external input value into an internal one and valueToLiteral(Object) which is a translation between an external input value into a literal.
The relationship between these three methods is as follows: It is required that every valid external input values for parseValue(Object) is also valid for valueToLiteral(Object) and vice versa. Furthermore the literals returned by valueToLiteral(Object) are required to be valid for parseLiteral(Object).

  • Method Summary

    Modifier and Type
    Method
    Description
    default @Nullable I
    parseLiteral(@NonNull Value<?> input, @NonNull CoercedVariables variables, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale)
    Called during query execution to convert a query input AST node into a Java object acceptable for the scalar type.
    default @Nullable I
    parseLiteral(@NonNull Object input)
    Deprecated.
    default @Nullable I
    parseLiteral(Object input, Map<String,Object> variables)
    Deprecated.
    default @Nullable I
    parseValue(@NonNull Object input)
    Deprecated.
    default @Nullable I
    parseValue(@NonNull Object input, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale)
    Called to resolve an input from a query variable into a Java object acceptable for the scalar type.
    default @Nullable O
    serialize(@NonNull Object dataFetcherResult)
    Deprecated.
    default @Nullable O
    serialize(@NonNull Object dataFetcherResult, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale)
    Called to convert a Java object result of a DataFetcher to a valid runtime value for the scalar type.
    default @NonNull Value
    valueToLiteral(@NonNull Object input)
    Deprecated.
    default @NonNull Value<?>
    valueToLiteral(@NonNull Object input, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale)
    Converts an external input value to a literal (Ast Value).
  • Method Details

    • serialize

      @Deprecated(since="2022-08-22") default @Nullable O serialize(@NonNull Object dataFetcherResult) throws CoercingSerializeException
      Deprecated.
      This is deprecated and you should implement serialize(Object, GraphQLContext, Locale) instead

      Called to convert a Java object result of a DataFetcher to a valid runtime value for the scalar type.

      Note : Throw CoercingSerializeException if there is fundamental problem during serialization, don't return null to indicate failure.

      Note : You should not allow RuntimeExceptions to come out of your serialize method, but rather catch them and fire them as CoercingSerializeException instead as per the method contract.

      Parameters:
      dataFetcherResult - is never null
      Returns:
      a serialized value which may be null.
      Throws:
      CoercingSerializeException - if value input can't be serialized
    • serialize

      default @Nullable O serialize(@NonNull Object dataFetcherResult, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale) throws CoercingSerializeException
      Called to convert a Java object result of a DataFetcher to a valid runtime value for the scalar type.

      Note : Throw CoercingSerializeException if there is fundamental problem during serialization, don't return null to indicate failure.

      Note : You should not allow RuntimeExceptions to come out of your serialize method, but rather catch them and fire them as CoercingSerializeException instead as per the method contract.

      Parameters:
      dataFetcherResult - is never null
      graphQLContext - the graphql context in place
      locale - the locale to use
      Returns:
      a serialized value which may be null.
      Throws:
      CoercingSerializeException - if value input can't be serialized
    • parseValue

      @Deprecated(since="2022-08-22") default @Nullable I parseValue(@NonNull Object input) throws CoercingParseValueException
      Deprecated.
      This is deprecated and you should implement parseValue(Object, GraphQLContext, Locale) instead

      Called to resolve an input from a query variable into a Java object acceptable for the scalar type.

      Note : You should not allow RuntimeExceptions to come out of your parseValue method, but rather catch them and fire them as CoercingParseValueException instead as per the method contract.

      Note : if input is explicit/raw value null, input coercion will return null before this method is called

      Parameters:
      input - is never null
      Returns:
      a parsed value which may be null
      Throws:
      CoercingParseValueException - if value input can't be parsed
    • parseValue

      default @Nullable I parseValue(@NonNull Object input, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale) throws CoercingParseValueException
      Called to resolve an input from a query variable into a Java object acceptable for the scalar type.

      Note : You should not allow RuntimeExceptions to come out of your parseValue method, but rather catch them and fire them as CoercingParseValueException instead as per the method contract. Note : if input is explicit/raw value null, input coercion will return null before this method is called

      Parameters:
      input - is never null
      graphQLContext - the graphql context in place
      locale - the locale to use
      Returns:
      a parsed value which may be null
      Throws:
      CoercingParseValueException - if value input can't be parsed
    • parseLiteral

      @Deprecated(since="2022-08-22") default @Nullable I parseLiteral(@NonNull Object input) throws CoercingParseLiteralException
      Deprecated.
      This is deprecated and you should implement parseLiteral(Value, CoercedVariables, GraphQLContext, Locale) instead

      Called during query validation to convert a query input AST node into a Java object acceptable for the scalar type. The input object will be an instance of Value.

      Note : You should not allow RuntimeExceptions to come out of your parseLiteral method, but rather catch them and fire them as CoercingParseLiteralException instead as per the method contract.

      Note : if input is literal NullValue, input coercion will return null before this method is called

      Parameters:
      input - is never null
      Returns:
      a parsed value which may be null
      Throws:
      CoercingParseLiteralException - if input literal can't be parsed
    • parseLiteral

      @Deprecated(since="2022-08-22") default @Nullable I parseLiteral(Object input, Map<String,Object> variables) throws CoercingParseLiteralException
      Deprecated.
      This is deprecated and you should implement parseLiteral(Value, CoercedVariables, GraphQLContext, Locale) instead

      Called during query execution to convert a query input AST node into a Java object acceptable for the scalar type. The input object will be an instance of Value.

      Note : You should not allow RuntimeExceptions to come out of your parseLiteral method, but rather catch them and fire them as CoercingParseLiteralException instead as per the method contract.

      Many scalar types don't need to implement this method because they don't take AST VariableReference objects and convert them into actual values. But for those scalar types that want to do this, then this method should be implemented. Note : if input is literal NullValue, input coercion will return null before this method is called

      Parameters:
      input - is never null
      variables - the resolved variables passed to the query
      Returns:
      a parsed value which may be null
      Throws:
      CoercingParseLiteralException - if input literal can't be parsed
    • parseLiteral

      default @Nullable I parseLiteral(@NonNull Value<?> input, @NonNull CoercedVariables variables, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale) throws CoercingParseLiteralException
      Called during query execution to convert a query input AST node into a Java object acceptable for the scalar type. The input object will be an instance of Value.

      Note : You should not allow RuntimeExceptions to come out of your parseLiteral method, but rather catch them and fire them as CoercingParseLiteralException instead as per the method contract.

      Many scalar types don't need to implement this method because they don't take AST VariableReference objects and convert them into actual values. But for those scalar types that want to do this, then this method should be implemented. Note : if input is literal NullValue, input coercion will return null before this method is called

      Parameters:
      input - is never null
      variables - the resolved variables passed to the query
      graphQLContext - the graphql context in place
      locale - the locale to use
      Returns:
      a parsed value which may be null
      Throws:
      CoercingParseLiteralException - if input literal can't be parsed
    • valueToLiteral

      @Deprecated(since="2022-08-22") default @NonNull Value valueToLiteral(@NonNull Object input)
      Deprecated.
      This is deprecated and you should implement valueToLiteral(Object, GraphQLContext, Locale) instead

      Converts an external input value to a literal (Ast Value).

      IMPORTANT: the argument is validated before by calling parseValue(Object).

      Parameters:
      input - an external input value
      Returns:
      The literal matching the external input value.
    • valueToLiteral

      default @NonNull Value<?> valueToLiteral(@NonNull Object input, @NonNull GraphQLContext graphQLContext, @NonNull Locale locale)
      Converts an external input value to a literal (Ast Value).

      IMPORTANT: the argument is validated before by calling parseValue(Object).

      Parameters:
      input - an external input value
      graphQLContext - the graphql context in place
      locale - the locale to use
      Returns:
      The literal matching the external input value.