I'm trying to run simplest graphql example. I created application with spring initializer and only added graphql dependencies. My build.gradle
buildscript {
ext {
springBootVersion = '2.1.1.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
compile 'com.graphql-java-kickstart:graphql-spring-boot-starter:5.3.1'
compile 'com.graphql-java-kickstart:graphiql-spring-boot-starter:5.3.1'
compile 'com.graphql-java-kickstart:voyager-spring-boot-starter:5.3.1'
}
DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
When I run the project and hit the endpoint /graphql
it returns 404
. What is missing in my configuration?
The docs (https://github.com/graphql-java-kickstart/graphql-spring-boot#enable-graphql-servlet) say:
The servlet becomes accessible at /graphql if graphql-spring-boot-starter added as a dependency to a boot application and a GraphQLSchema bean is present in the application.
...and the minimum example it links to looks like this:
@SpringBootApplication
public class ApplicationBootConfiguration {
public static void main(String[] args) {
SpringApplication.run(ApplicationBootConfiguration.class, args);
}
@Bean
GraphQLSchema schema() {
return GraphQLSchema.newSchema()
.query(GraphQLObjectType.newObject()
.name("query")
.field(field -> field
.name("test")
.type(Scalars.GraphQLString)
.dataFetcher(environment -> "response")
)
.build())
.build();
}
}
So you're missing a Graphql schema to be used. It says if there is one, the API endpoint will be exposed automatically.
Good luck!
I had a equal problem using graphiql and Swagger The page graphiql got me erros 404 on browser console. The problem was that cannot get the js library from vendor resource.
On class SwaggerConfig extends WebMvcConfigurationSupport
I did:
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
//This is for graphiql works
registry.addResourceHandler("/vendor/**")
.addResourceLocations("classpath:/static/vendor/");
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With