Skip to content


Say you need the result from several root queries, e.g. all superHeroes and all superVillains. Java only supports a single return value, so you’ll need a wrapper class:

interface SuperHeroesApi {
    HeroesAndVillains heroesAndVillains();

class HeroesAndVillains {
    List<SuperHero> superHeroes;
    List<SuperVillain> superVillains;

The @Multiple annotation 'inlines' the wrapper class, i.e. the actual query is:

query heroesAndVillains { superHeroes {...} superVillains {...}}

The actual response below will be mapped to an instance of the HeroesAndVillains wrapper class:

  "data": {
    "superHeroes": [ ... ],
    "superVillains": [ ... ]

If the nested queries require parameters, use @ annotations to put them on the field (remember: GraphQL fields can have parameters).

If you need the same request several times (e.g. with different query parameters), use @Name annotations, so the actual field names are used as alias.