Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problem with spring boot graphql. Request /graphql results with 404

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?

like image 955
Wojciech Wirzbicki Avatar asked Dec 06 '18 09:12

Wojciech Wirzbicki


2 Answers

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!

like image 69
bkis Avatar answered Nov 29 '22 13:11

bkis


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/");

}

like image 32
Guilherme Avatar answered Nov 29 '22 15:11

Guilherme