면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
프로젝트의 Graphql 클라이언트 참조
이 graphql 클라이언트는 현재 graphql 서버의 게시물을 지원합니다
사용 Maven은 의존성을 구축
<dependency>
<groupId>org.mountcloud</groupId>
<artifactId>graphql-client</artifactId>
<version>1.2</version>
</dependency>
프로젝트 주소 : GitHub의
업데이트 로그 1.2
사용자 정의 매개 변수 요청 및 복합 형 열거 유형을 지원합니다.
용례
질문
graphql 클라이언트의 건설
//graphql服务器地址
String serverUrl = "http://localhost:8080/graphql";
//build一个新的graphqlclient
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(serverUrl);
//如果说graphql需要健全信息我们可以用map来进行传递
Map<String,String> httpHeaders = new HashMap<>();
httpHeaders.put("token","graphqltesttoken");
//设置http请求的头
graphqlClient.setHttpHeaders(httpHeaders);
간단한 쿼리 쿼리 출시
//创建一个Query并设置query的名字为findUser
//如果有特殊需要可以自己继承GraphqlQuery,DefaultGraphqlQuery已经可以满足所有请求了
GraphqlQuery query = new DefaultGraphqlQuery("findUser");
//我们需要查询user的名字,性别还有年龄,设置需要查询的这三个属性。
query.addResultAttributes("name","sex","age");
try {
//执行query
GraphqlResponse response = graphqlClient.doQuery(query);
//获取数据,数据为map类型
Map result = response.getData();
} catch (IOException e) {
e.printStackTrace();
}
에 해당하는 graphql 문 :
query{
findUser{
name
sex
age
}
}
복잡한 쿼리의 결과를 설정
//创建一个Query并设置query的名字为findUser
//如果有特殊需要可以自己继承GraphqlQuery,DefaultGraphqlQuery已经可以满足所有请求了
GraphqlQuery query = new DefaultGraphqlQuery("findUser");
//------------------------------------------------------------------------
//查询名字为张三,年龄为23岁的人,这里的参数类型一定要与query的参数类型一致
query.addParameter("name","张三").addParameter("age",23);
//------------------------------------------------------------------------
//我们需要查询user的名字,性别还有年龄,设置需要查询的这三个属性。
query.addResultAttributes("name","sex","age");
//------------------------------------------------------------------------
//查询用户的部门
ResultAttributtes departmentAttr = new ResultAttributtes("department");
//查询部门的名字和编号
departmentAttr.addResultAttributes("name","code");
//查询部门所属的公司
ResultAttributtes companyAttr = new ResultAttributtes("company");
//查询部门所属公司的名字
companyAttr.addResultAttributes("name");
//将部门和公司两者关联起来
departmentAttr.addResultAttributes(companyAttr);
//将需要查询的这个语句放到query里
query.addResultAttributes(departmentAttr);
//------------------------------------------------------------------------
try {
//执行query
GraphqlResponse response = graphqlClient.doQuery(query);
//获取数据,数据为map类型
Map result = response.getData();
} catch (IOException e) {
e.printStackTrace();
}
에 해당하는 graphql 문 :
query{
findUser(name:"张三",age:23){
name
sex
age
department{
name
code
company{
name
}
}
}
}
돌연 변이
다음은 같은 쿼리, 사실, 복잡한 mutaion를 작성하는
//创建一个mutation并设置名字为updateUser
GraphqlMutation mutation = new DefaultGraphqlMutation("updateUser");
//设置参数,用户id为12,名字为张三,年龄为24
mutation.addParameter("id",12).addParameter("name","张三").addParameter("age",24);
//获取修改的结果
mutation.addResultAttributes("code");
//获取结果里的数据:data对象昂
ResultAttributtes dataAttr = new ResultAttributtes("data");
//获取data里的消息、修改执行状态与时间戳
dataAttr.addResultAttributes("message","state","date");
//将data与mutation关联起来
mutation.addResultAttributes(dataAttr);
//执行mutation
try {
GraphqlResponse mutationResponse = graphqlClient.doMutation(mutation);
//同样返回的数据也是map的
Map mutationResult = mutationResponse.getData();
} catch (IOException e) {
e.printStackTrace();
}
복잡한 요청을 구현하는 방법
돌연변이, 쿼리 및 돌연변이 같은 원리 프리젠 테이션 작업을 수행합니다.
@Test
public void testObjectParameter() throws IOException {
String serverUrl = "http://localhost:8080/graphql";
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(serverUrl);
Map<String,String> httpHeaders = new HashMap<>();
httpHeaders.put("token","graphqltesttoken");
graphqlClient.setHttpHeaders(httpHeaders);
GraphqlMutation mutation = new DefaultGraphqlMutation("addUser");
List<User> users = new ArrayList<>();
users.add(new User("tim",SexEnum.M));
users.add(new User("sdf",SexEnum.F));
mutation.getRequestParameter().addParameter("classId","123").addObjectParameter("users",users);
mutation.addResultAttributes("code");
System.out.println(mutation.toString());
}
/**
* test user
*/
class User{
public User(String name, SexEnum sexEnum) {
this.name = name;
this.sexEnum = sexEnum;
}
private String name;
private SexEnum sexEnum;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SexEnum getSexEnum() {
return sexEnum;
}
public void setSexEnum(SexEnum sexEnum) {
this.sexEnum = sexEnum;
}
}
/**
* test user sex
*/
enum SexEnum{
M,
F
}
돌연변이 문을 해당 :
mutation{
addUser(classId:"123",users:[{name:"tim",sexEnum:M},{name:"sdf",sexEnum:F}]){
code
}
}
댓글 환영 논의합니다.