
graphql.spring.web.servlet.components.GraphQLController Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of graphql-java-spring-webmvc
Show all versions of graphql-java-spring-webmvc
GraphQL Java Spring Webmvc integration
The newest version!
package graphql.spring.web.servlet.components;
import com.fasterxml.jackson.databind.ObjectMapper;
import graphql.ExecutionResult;
import graphql.Internal;
import graphql.spring.web.servlet.ExecutionResultHandler;
import graphql.spring.web.servlet.GraphQLInvocation;
import graphql.spring.web.servlet.GraphQLInvocationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.WebRequest;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@RestController
@Internal
public class GraphQLController {
@Autowired
GraphQLInvocation graphQLInvocation;
@Autowired
ExecutionResultHandler executionResultHandler;
@Autowired
ObjectMapper objectMapper;
@RequestMapping(value = "${graphql.url:graphql}",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Object graphqlPOST(@RequestBody GraphQLRequestBody body,
WebRequest webRequest) {
String query = body.getQuery();
if (query == null) {
query = "";
}
CompletableFuture executionResult = graphQLInvocation.invoke(new GraphQLInvocationData(query, body.getOperationName(), body.getVariables()), webRequest);
return executionResultHandler.handleExecutionResult(executionResult);
}
@RequestMapping(value = "${graphql.url:graphql}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Object graphqlGET(
@RequestParam("query") String query,
@RequestParam(value = "operationName", required = false) String operationName,
@RequestParam(value = "variables", required = false) String variablesJson,
WebRequest webRequest) {
CompletableFuture executionResult = graphQLInvocation.invoke(new GraphQLInvocationData(query, operationName, convertVariablesJson(variablesJson)), webRequest);
return executionResultHandler.handleExecutionResult(executionResult);
}
private Map convertVariablesJson(String jsonMap) {
if (jsonMap == null) return Collections.emptyMap();
try {
return objectMapper.readValue(jsonMap, Map.class);
} catch (IOException e) {
throw new RuntimeException("Could not convert variables GET parameter: expected a JSON map", e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy