Class DataFetcherResult<T>

java.lang.Object
graphql.execution.DataFetcherResult<T>
Type Parameters:
T - The type of the data fetched

@PublicApi @NullMarked public class DataFetcherResult<T> extends Object
An object that can be returned from a DataFetcher that contains both data, local context and errors to be added to the final result. This is a useful when your ``DataFetcher`` retrieves data from multiple sources or from another GraphQL resource, or you want to pass extra context to lower levels.

This also allows you to pass down new local context objects between parent and child fields. If you return a getLocalContext() value then it will be passed down into any child fields via DataFetchingEnvironment.getLocalContext()

You can also have DataFetchers contribute to the ExecutionResult.getExtensions() by returning extensions maps that will be merged together via the ExtensionsBuilder and its ExtensionsMerger in place.

This provides hashCode() and equals(Object) methods that afford comparison with other DataFetcherResult object.s However, to function correctly, this relies on the values provided in the following fields in turn also implementing hashCode()} and equals(Object) as appropriate:

  • Method Details

    • getData

      public @Nullable T getData()
      Returns:
      The data fetched. May be null.
    • getErrors

      public List<GraphQLError> getErrors()
      Returns:
      errors encountered when fetching data. This will be non null but possibly empty.
    • hasErrors

      public boolean hasErrors()
      Returns:
      true if there are any errors present
    • getLocalContext

      public @Nullable Object getLocalContext()
      A data fetcher result can supply a context object for that field that is passed down to child fields
      Returns:
      a local context object
    • getExtensions

      public @Nullable Map<Object,Object> getExtensions()
      A data fetcher result can supply extension values that will be merged into the result via the ExtensionsBuilder at the end of the operation.

      The ExtensionsMerger in place inside the ExtensionsBuilder will control how these extension values get merged.

      Returns:
      a map of extension values to be merged
      See Also:
    • transform

      public DataFetcherResult<T> transform(Consumer<DataFetcherResult.Builder<T>> builderConsumer)
      This helps you transform the current DataFetcherResult into another one by starting a builder with all the current values and allows you to transform it how you want.
      Parameters:
      builderConsumer - the consumer code that will be given a builder to transform
      Returns:
      a new instance produced by calling build on that builder
    • map

      public <R> DataFetcherResult<R> map(Function<@Nullable T,@Nullable R> transformation)
      Transforms the data of the current DataFetcherResult using the provided function. All other values are left unmodified.
      Type Parameters:
      R - the result type
      Parameters:
      transformation - the transformation that should be applied to the data
      Returns:
      a new instance with where the data value has been transformed
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • newResult

      public static <T> DataFetcherResult.Builder<T> newResult()
      Creates a new data fetcher result builder
      Type Parameters:
      T - the type of the result
      Returns:
      a new builder