Próbuję uruchomić najprostszy przykład Graphql. Stworzyłem aplikację z inicjalizacją sprężyny i dodałem tylko zależności Graphql. Mój 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);
    }
}

Kiedy uruchamiam projekt i trafiam do punktu końcowego /graphql, zwraca 404. Czego brakuje w mojej konfiguracji?

5
Wojciech Wirzbicki 6 grudzień 2018, 12:41
1
Sprawdziłeś port, o który prosisz? I czy Spring coś rejestruje po otrzymaniu żądania?
 – 
bkis
6 grudzień 2018, 12:53
Tak, sprawdziłem port. 404 oznacza, że ​​serwer otrzymał żądanie.
 – 
Wojciech Wirzbicki
6 grudzień 2018, 13:00
To prawda, moja wina. A ten pakiet graphql, który masz w swoich zależnościach, ma automatycznie uwidaczniać punkt końcowy /graphql? Widzę, że jest to w twoich depsach, ale nie ma dalszej konfiguracji dotyczącej graphql api.
 – 
bkis
6 grudzień 2018, 13:16
Dokumenty są dość niechlujne, nie mogę znaleźć tutaj żadnego minimalnego działającego przykładu github.com/graphql- java-kickstart/graphql-spring-boot. Musiałem przegapić coś ważnego.
 – 
Wojciech Wirzbicki
6 grudzień 2018, 13:22

2 odpowiedzi

Najlepsza odpowiedź

Dokumenty (https://github.com/graphql- java-kickstart/graphql-spring-boot#enable-graphql-servlet) powiedz:

Servlet staje się dostępny w / Graphql, jeśli Graphql-Spring-Boot-Starter dodał jako zależność aplikacji rozruchowej, a fasola Graphqlschema jest obecna w aplikacji.

...a minimalny przykład, do którego prowadzi, wygląda tak:

@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();
    }
}

Więc brakuje nam schematu Graphql. Mówi, że jeśli jest jeden, punkt końcowy API zostanie wystawiony automatycznie.
Powodzenia!

9
bkis 6 grudzień 2018, 13:50
Nie działa, wyświetla kolejny błąd podczas uruchamiania mówiący, że potrzebujesz fasoli typu GraphQL
 – 
André Ramon
5 sierpień 2020, 13:16

Miałem taki sam problem przy użyciu graphiql i Swagger Strona graphiql dała mi błąd 404 na konsoli przeglądarki. Problem polegał na tym, że nie można pobrać biblioteki js z zasobu dostawcy.

Na class SwaggerConfig extends WebMvcConfigurationSupport

Zrobiłem:

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

}

3
Guilherme 14 sierpień 2020, 18:31