2016-04-21 2 views
0

Я, выполняя следующий код и результат:Привет мир с GraphQLObjectType

{TestPojo={id=null, name=null}} 

Я ожидал, что результат будет {TestPojo={id="1", name="Jack"}}. Что мне не хватает?

import static graphql.Scalars.GraphQLString; 
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; 
import static graphql.schema.GraphQLObjectType.newObject; 

import java.util.Map; 

import graphql.GraphQL; 
import graphql.schema.DataFetcher; 
import graphql.schema.DataFetchingEnvironment; 
import graphql.schema.GraphQLObjectType; 
import graphql.schema.GraphQLSchema; 

public class HelloWorld { 
    public static void main(String[] args) { 
     // sub schema to be added to parent schema 
     GraphQLObjectType testPojo = newObject().name("TestPojo") 
               .description("This is a test POJO") 
               .field(newFieldDefinition().name("id").type(GraphQLString).build()) 
               .field(newFieldDefinition().name("name").type(GraphQLString).build()) 
               .build(); 
     // parent schema 
     GraphQLObjectType queryType = newObject().name("helloWorldQuery") 
               .field(newFieldDefinition().name(testPojo.getName()) 
                      .type(testPojo) 
                      .dataFetcher(new DataFetcher() { 
                       @Override 
                       public Object get(DataFetchingEnvironment arg0) { 
                        Object a = new GrapgQLSampleController() 
                             .greeting2(); 
                        return a; 
                       } 
                      }) 
                      .build()) 
               .build(); 


     GraphQLSchema schema = GraphQLSchema.newSchema().query(queryType).build(); 
     Map<String, Object> result = (Map<String, Object>) new GraphQL(schema).execute("{TestPojo {id,name}}") 
                       .getData(); 
     System.out.println(result); 
     // Prints: {TestPojo={id=null, name=null}} 
    } 

    /** 
    * service method 2 
    * 
    * @return 
    */ 
    public TestPojo greeting2() { 
     return new TestPojo("1", "Jack"); 
    } 

    // inner pojo 
    class TestPojo { 
     public String id; 
     public String name; 

     TestPojo(String id, String name) { 
      this.id = id; 
      this.name = name; 
     } 
    } 
} 

ответ

-1

Попытка быть педагогической, установив код. Обратите внимание, что статический контент приходит от того, что находится в .staticValue ("X")

GraphQLObjectType testPojo = newObject().name("TestPojo") 
              .description("This is a test POJO") 
              .field(newFieldDefinition().type(GraphQLString).name("id").staticValue("Test1")) 
              .field(newFieldDefinition().type(GraphQLString).name("name").staticValue("pojo1")) 
              .build(); 

    GraphQLSchema schema = GraphQLSchema.newSchema().query(testPojo).build(); 
    Map<String, Object> result = (Map<String, Object>) new GraphQL(schema).execute("{id,name}") 
                      .getData(); 
    System.out.println(result); 

Напечатает {ID = Test1, имя = pojo1}

Можно обновить пример использования DataFetcher, когда у меня есть время

+0

этот ответ не ответил на заданный вопрос –

0

Попробуйте добавить методы getter на свой класс TestPojo, поскольку они будут вызываться при объявлении класса. В противном случае определите свой собственный DataFetcher на поле.

class TestPojo { 
    public final String id; 
    public final String name; 

    TestPojo(String id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    String getId() { 
     return id; 
    } 

    String getName() { 
     return name; 
    } 
}