irpas技术客

在Java中,graphql的使用方法_282162974838632_java使用graphql

网络投稿 7951

目录

graphql使用步骤

一、创建一个SpringBoot项目,并导入下方依赖

二、配置?application.properties文件

?三、在resources下创建graphql目录,并在graphql下创建三个.graphql文件(main.graphql , person.graphql , user.graphql)

?mani.graphql 中的内容

?person.graphql 中的内容

?user.graphql中的内容

四、?创建类

?1. 创建与下方图片相同的层级目录

2. Person类、Sex类和User类中代码

3. PersonFieldResolver类中代码

4. UserInput类和PersonInput类中的代码

5. MutationTest类、PersonMutation类和UserMutation类中的代码

6.?PersonQuery类、QueryTest类、UserQuery类中代码

7.ScalarDate类中的代码

8.DemoApplication类中的代码

五、使用浏览器打开?http://127.0.0.1:8080/playground?网站?

?在左边编写指令获取数据?


graphql使用步骤 一、创建一个SpringBoot项目,并导入下方依赖 <!--graphql-spring-boot--> <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>11.0.0</version> </dependency> <!--playground--> <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>playground-spring-boot-starter</artifactId> <version>7.1.0</version> <scope>runtime</scope> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>

二、配置?application.properties文件 graphql.tools.schema-location-pattern=./graphql/*.graphql #设置http://127.0.0.1:8080/playground网页的颜色,dark为黑色,light为白色 graphql.playground.settings.editor.theme=light

?三、在resources下创建graphql目录,并在graphql下创建三个.graphql文件(main.graphql , person.graphql , user.graphql)

?mani.graphql 中的内容 #scalar用于自定一个数据类型 scalar Date type Query { # ! 表示不能为空,[]表示为链表或数组 events1 : [Date!]! } type Mutation{ createEvents1(date:Date):Date } #可省略 schema { # query query: Query # mutation mutation: Mutation } #定义一个枚举类 # Sex 可为参数,也可为返回值 enum Sex{ MALE FEMALE } ?person.graphql 中的内容 # extend 表示继承,继续对 mian.qraphql 中 Query 的编写 extend type Query{ personQuery1:Person personQuery2(id:String!):Person } # extend 表示继承,继续对 mian.qraphql 中 Mutation 的编写 extend type Mutation { createPerson(personInput:PersonInput):Person } # input 表示PersonInput只能作为为参数 # 且必须创建一个名字、参数都与这里定义相同的类 input PersonInput{ name:String sex:Sex text:String } # type 表示Person不能作为为参数,可为返回值 # 且必须创建一个名字、参数都与这里定义相同的类 type Person{ id:String name:String sex:Sex text:String user:User list:[String] } ?user.graphql中的内容 # ! 表示不能为空 # extend 表示继承,继续对 mian.qraphql 中 Query 的编写 extend type Query{ userQuery1:User userQuery2(id:ID!): User } # extend 表示继承,继续对 mian.qraphql 中 Mutation 的编写 extend type Mutation{ createUser(UserInput:UserInput):User } # type 表示User不能作为为参数,可为返回值 # 且必须创建一个名字、参数都与这里定义相同的类 type User { id:String name:String sex:Sex text:String } # input 表示UserInput只能作为为参数 # 且必须创建一个名字、参数都与这里定义相同的类 input UserInput{ name:String sex:Sex text:String }

四、?创建类 ?1. 创建与下方图片相同的层级目录

个人习惯,可以不同

2. Person类、Sex类和User类中代码 @Getter public class Person { String id; String name; Sex sex; String text; @Setter User user; @Setter List<String> list; public Person(String id,String name,Sex sex,String text){ this.id=id; this.name=name; this.sex=sex; this.text=text; } } public enum Sex { MALE("男"),FEMALE("女"); Sex( String sex){ this.sex=sex; } String sex; } @Getter @AllArgsConstructor public class User { String id; String name; Sex sex; String text; } 3. PersonFieldResolver类中代码 /** * 该类用于给 Person类 的 user 和 list 添加数据 * @author y */ @Component public class PersonFieldResolver implements GraphQLResolver<Person> { /** * 该方法名要与Person类中User的变量名相同,且参数类型必须是Person */ public User user(Person person){ return new User("1","wjy", Sex.MALE,"yqy"); } /** * 该方法名要与Person类中List<String>的变量名相同,且参数类型必须是Person */ public List<String> list(Person person){ return Arrays.asList("e","f","g"); } } 4. UserInput类和PersonInput类中的代码 @Getter public class UserInput { String name; Sex sex; String text; } @Getter public class PersonInput { String name; Sex sex; String text; } 5. MutationTest类、PersonMutation类和UserMutation类中的代码 @Component public class MutationTest implements GraphQLMutationResolver { /** * 方法名、传入参数类型、传入参数名、传出参数类型都需和 main.graphql文件中 type Mutation下的相同 * @param date 前端传入的数据 * @return 返回给前端的数据 */ public LocalDateTime createEvents1(LocalDateTime date){ return date; } } @Component public class PersonMutation implements GraphQLMutationResolver { static public Map<String, Person> map=new ConcurrentHashMap<>(); /** * 方法名、传入参数类型、传入参数名、传出参数类型都需和 person.graphql文件中 extend type Mutation 下的相同 * @param personInput 前端传入的数据 * @return 返回给前端的数据 */ public Person createPerson(PersonInput personInput){ Person person=new Person(UUID.randomUUID().toString(),personInput.getName(),personInput.getSex(),personInput.getText()); map.put(person.getId(),person); System.out.println("Person map size:"+map.size()); return person; } } @Component public class UserMutation implements GraphQLMutationResolver { static public Map<String, User> map=new ConcurrentHashMap<>(); /** * 方法名、传入参数类型、传入参数名、传出参数类型都需和 user.graphql文件中 extend type Mutation 下的相同 * @param userInput 前端传入的数据 * @return 返回给前端的数据 */ public User createUser(UserInput userInput){ User user =new User(UUID.randomUUID().toString(),userInput.getName(),userInput.getSex(),userInput.getText()); map.put(user.getId(), user); System.out.println("User map size:"+map.size()); return user; } } 6.?PersonQuery类、QueryTest类、UserQuery类中代码 @Component public class PersonQuery implements GraphQLQueryResolver { /** * 方法名、传入参数类型、传入参数名、传出参数类型都需和 person.graphql文件中 extend type query 下的相同 * @return 返回给前端的数据 */ public Person personQuery1(){ Person person=new Person(UUID.randomUUID().toString(),"xxx", Sex.MALE,"xxx"); return person; } public Person personQuery2(String id){ return PersonMutation.map.get(id); } } @Component public class QueryTest implements GraphQLQueryResolver { /** * 方法名、传入参数类型、传入参数名、传出参数类型都需和 main.graphql文件中 type query 下的相同 * @return 返回给前端的数据 */ public List<LocalDateTime> events1(){ List<LocalDateTime> list= Arrays.asList(LocalDateTime.now(),LocalDateTime.now()); return list; } } @Component public class UserQuery implements GraphQLQueryResolver { /** * 方法名、传入参数类型、传入参数名、传出参数类型都需和 user.graphql文件中 extend type query 下的相同 * @return 返回给前端的数据 */ public User userQuery1(){ User user =new User("1","xxx", Sex.MALE,"xxx"); return user; } public User userQuery2(String id){ return UserMutation.map.get(id); } } 7.ScalarDate类中的代码 @Component public class ScalarDate extends GraphQLScalarType { public ScalarDate() { //第一个参数的值必须和 main.graphql 文件中 scalar 定义的相同,第二个可以随意起名 super("Date", "日期", new Coercing() { /** * 当后端向前端发送 Date 类型数据时调用的方法,将数据转换为 String 型 * o 可以强制转型为 LocalDateTime * 将 LocalDateTime 型的数据转换为 String 型再传给前端 * @param o * @return 返回给前端的数据 */ @Override public String serialize(Object o) throws CoercingSerializeException { System.out.println("serialize-->"+(LocalDateTime)o); return o.toString(); } @Override public LocalDateTime parseValue(Object o) throws CoercingParseValueException { StringValue string=(StringValue)o; System.out.println("parseLiteral-->"+string.getValue()); System.out.println("parseLiteral-->"+string.toString()); return LocalDateTime.parse(string.getValue()); } /** * 当前端向后端传输 Date 类型数据时调用的方法,将数据转换为 LocalDateTime 型 * 此时,o 不能强制转型为 LocalDateTime,只能转为 StringValue 型 * @param o 前端传入的数据 * @return 后端接受的数据 */ @Override public LocalDateTime parseLiteral(Object o) throws CoercingParseLiteralException { StringValue string=(StringValue)o; System.out.println("parseLiteral-->"+string.getValue()); System.out.println("parseLiteral-->"+string.toString()); return LocalDateTime.parse(string.getValue()); } }); } } 8.DemoApplication类中的代码 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Slf4j @Component @RequiredArgsConstructor private static class AppRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) { log.info("graphql playground: http://127.0.0.1:{}/playground", "8080"); } } } 五、使用浏览器打开?http://127.0.0.1:8080/playground?网站? ?在左边编写指令获取数据?

?自己记录的一些笔记,内容如有不对请指正??


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #java使用graphql #persongraphql