我在Spring Boot 2和GraphQL中使用了以下示例,但在加载graphiql时出现了以下错误,模式没有加载。
https://github.com/TechPrimers/spring-boot-graphql-query-example
该代码通过postman但来自Graphiql的POST调用工作。
@RestController
public class GraphQLController {
private GraphQLService graphQLService;
public GraphQLController(GraphQLService graphQLService) {
this.graphQLService = graphQLService;
}
@PostMapping("/graphql")
public ExecutionResult graphQl(@RequestBody String query) {
ExecutionResult result = graphQLService.getGraphQL().execute(query);
return result;
}
}
{
"data": null,
"errors": [
{
"message": "Invalid Syntax : offending token '\"query\"' at line 1 column 1",
"sourcePreview": "{\"query\":\"\\n query IntrospectionQuery {\\n __schema {\\n queryType { name }\\n mutationType { name }\\n types {\\n ...FullType\\n }\\n directives {\\n name\\n description\\n locations\\n args {\\n ...InputValue\\n }\\n }\\n }\\n }\\n\\n fragment FullType on __Type {\\n kind\\n name\\n description\\n fields(includeDeprecated: true) {\\n name\\n description\\n args {\\n ...InputValue\\n }\\n type {\\n ...TypeRef\\n }\\n isDeprecated\\n deprecationReason\\n }\\n inputFields {\\n ...InputValue\\n }\\n interfaces {\\n ...TypeRef\\n }\\n enumValues(includeDeprecated: true) {\\n name\\n description\\n isDeprecated\\n deprecationReason\\n }\\n possibleTypes {\\n ...TypeRef\\n }\\n }\\n\\n fragment InputValue on __InputValue {\\n name\\n description\\n type { ...TypeRef }\\n defaultValue\\n }\\n\\n fragment TypeRef on __Type {\\n kind\\n name\\n ofType {\\n kind\\n name\\n ofType {\\n kind\\n name\\n ofType {\\n kind\\n name\\n ofType {\\n kind\\n name\\n ofType {\\n kind\\n name\\n ofType {\\n kind\\n name\\n ofType {\\n kind\\n name\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n\"}\n",
"offendingToken": "\"query\"",
"locations": [
{
"line": 1,
"column": 1,
"sourceName": null
}
],
"errorType": "InvalidSyntax",
"path": null,
"extensions": null
}
],
"dataPresent": false,
"extensions": null
}
在Spring Boot 2中使用GraphQL时,不需要创建API后endpoint/GraphQL。以下是需要遵循的步骤:
第1步:在GraphQL的pom.xml中添加依赖项:
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>5.2.4</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
步骤2:创建GraphQL模式:下面是一个示例GraphQL模式:
type Employee {
id: ID!
name: String!
department: String!
salary: Int!
}
type Query {
getEmployees: [Employee]!
countEmployees: Float!
getEmployee(id: ID):Employee
}
type Mutation {
newEmployee (name: String!, department: String!, salary: Int!): Employee
deleteEmployee(id: ID): Boolean!
}
步骤3:创建GraphQL类,并用注释组件标记它们。下面是一个示例类:
@Component
public class EmployeeQuery implements GraphQLQueryResolver {
@Autowired
private EmployeeService employeeservice;
public List<Employee> getEmployees() {
return employeeservice.findAll();
}
public long countEmployees() {
return employeeservice.count();
}
public Optional<Employee> getEmployee(final int id) {
return employeeservice.findById(id);
}
}
在此之后,endpoint/graphql将自动可用,GraphiQL也将正常工作。我在一篇博客文章中编写了一个简单的GraphQL和Spring Boot示例,其中包含GitHub中的工作代码。请参阅:http://softwaredevelopercentral.blogspot.com/2019/11/graphql-spring-boot-and-mysql-tutorial.html
首先,您使用的是一个奇怪的堆栈。而graphql java工具最近一直生活在com下。graphql java在Maven中实际上是一个完全独立的堆栈。最新版本在新的groupId下发布。graphql java kickstart,以避免将来的混淆。
现在,如果您已经在使用graphql java工具,那么您需要的初学者是com。graphql java kickstart:graphql spring boot starter,因为它们打算一起使用。
您正在使用的启动器(com.graphql-java: graph ql-spring-boot-starter
)旨在与纯graph ql-java
一起使用。您只需要连接一个GraphQL
类型的bean。有关更多详细信息,请参阅官方教程。
它们可以一起工作,请注意,这只是一个次优组合。
现在,出现此错误的原因是,您的HTTPendpoint(Spring控制器)不符合GraphQL over HTTP规范,而GraphiQL正期待着这一点(具体来说,GraphiQL正在使用POST变体)。邮递员不是,所以它过去了。
更改后端以期望请求中的JSON对象的最佳方法,形状如下:
{
"query": "...",
"operationName": "...",
"variables": { "myVariable": "someValue", ... }
}
您需要使用属性查询、操作名称和arg创建自己的对象。
public class Data {
private String query;
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}
@PostMapping("/graphql")
public ExecutionResult graphQl(@RequestBody Data query) {
ExecutionResult result = graphQLService.getGraphQL().execute(query.getQuery());
return result;
}
我正在使用Javase6手动部署webservice。我想使用@SchemaValidation来验证SOAP流量。在发布终结点期间,我收到错误: 原因:org.xml.sax.SAXParseException:s4s-att-invalid-value:元素“restriction”中“base”的属性值无效。记录原因:UndeclaredPrefix:无法将“xsd:string”解析为QN
下面的代码是在pyspark shell中运行时的工作文件,但在spark submit master Thread中执行时失败。 我在这里怎么了? 错误:
但随后: UPDATE:当使用master=“local”连接时,此操作工作,当连接到master=“MySparkCluster”时,此操作失败。
有些人也遇到了同样的问题:https://community.cloudera.com/T5/web-ui-hue-beeswax/hue-and-presto-integration-error-on-page-load/TD-P/62353 我希望得到你的帮助!
问题内容: 我在使用ASP.Net 4.0 Ajax时遇到了一个复杂的问题。…我在计算机上使用Visual Studio 2010创建了一个网站,并添加了一些以前可以正常使用的更新面板,但是突然我运行我的电脑时遇到了一系列错误网站 Microsoft JScript运行时错误:ASP.NET Ajax客户端框架无法加载。 Microsoft JScript运行时错误:“ Sys”未定义 奇怪的是,
在我的Windows10机器上启动播放项目时遇到问题(在Win7上运行良好) 当我执行“激活器运行”时,我会得到以下结果: 我试过很多事情都没有成功。我试着从: 至 addSbtPlugin(“com.typesafe.play”%“sbt-plugin”%“2.3.2”) 我得到另一个错误: 再一次,我在Win10(64bit)上 这里真的需要一些帮助,被困了几天。