refactor to GraphQLHttpRequest and GraphQLHttpResponse and added params map
This commit is contained in:
@@ -19,29 +19,29 @@ public class GraphQLHandler {
|
||||
this.interceptor = interceptor;
|
||||
}
|
||||
|
||||
public Mono<GraphQLResponse> graphqlPOST(GraphQLRequestBody body, HttpHeaders httpHeaders) {
|
||||
String query = body.getQuery();
|
||||
public Mono<GraphQLHttpResponse> graphqlPOST(GraphQLHttpRequest graphQLHttpRequest) {
|
||||
String query = graphQLHttpRequest.getQuery();
|
||||
ExecutionInput input = ExecutionInput.newExecutionInput()
|
||||
.query(query)
|
||||
.operationName(body.getOperationName())
|
||||
.variables(body.getVariables())
|
||||
.operationName(graphQLHttpRequest.getOperationName())
|
||||
.variables(graphQLHttpRequest.getVariables())
|
||||
.build();
|
||||
Mono<ExecutionInput> executionInput = interceptor.preHandle(input, httpHeaders);
|
||||
Mono<ExecutionInput> executionInput = interceptor.preHandle(input, graphQLHttpRequest.getHttpHeaders());
|
||||
return executionInput
|
||||
.flatMap(this::execute)
|
||||
.flatMap(result -> interceptor.postHandle(result, httpHeaders))
|
||||
.flatMap(result -> toResponseBody(result, httpHeaders));
|
||||
.flatMap(result -> interceptor.postHandle(result, graphQLHttpRequest.getHttpHeaders()))
|
||||
.flatMap(result -> toResponseBody(result, graphQLHttpRequest.getHttpHeaders()));
|
||||
}
|
||||
|
||||
private Mono<GraphQLResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) {
|
||||
private Mono<GraphQLHttpResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) {
|
||||
Map<String, Object> responseBodyRaw = executionResult.toSpecification();
|
||||
Object data = responseBodyRaw.get("data");
|
||||
List<Map<String, Object>> errors = (List<Map<String, Object>>) responseBodyRaw.get("errors");
|
||||
Map<String, Object> extensions = (Map<String, Object>) responseBodyRaw.get("extensions");
|
||||
GraphQLResponse responseBody = new GraphQLResponse(data,
|
||||
GraphQLHttpResponse responseBody = new GraphQLHttpResponse(data,
|
||||
errors,
|
||||
extensions);
|
||||
Mono<GraphQLResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders);
|
||||
extensions, httpHeaders);
|
||||
Mono<GraphQLHttpResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders);
|
||||
return graphQLResponseBodyMono;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package org.springframework.graphql;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class GraphQLHttpRequest {
|
||||
private final String query;
|
||||
private final String operationName;
|
||||
private final Map<String, Object> variables;
|
||||
private final HttpHeaders httpHeaders;
|
||||
private final MultiValueMap<String, String> requestParams;
|
||||
|
||||
public GraphQLHttpRequest(String query,
|
||||
String operationName,
|
||||
Map<String, Object> variables,
|
||||
HttpHeaders httpHeaders,
|
||||
MultiValueMap<String, String> requestParams) {
|
||||
this.query = query;
|
||||
this.operationName = operationName;
|
||||
this.variables = variables;
|
||||
this.httpHeaders = httpHeaders;
|
||||
this.requestParams = requestParams;
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
public String getOperationName() {
|
||||
return operationName;
|
||||
}
|
||||
|
||||
public Map<String, Object> getVariables() {
|
||||
return variables;
|
||||
}
|
||||
|
||||
public HttpHeaders getHttpHeaders() {
|
||||
return httpHeaders;
|
||||
}
|
||||
|
||||
public MultiValueMap<String, String> getRequestParams() {
|
||||
return requestParams;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,25 @@
|
||||
package org.springframework.graphql;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GraphQLResponse {
|
||||
public class GraphQLHttpResponse {
|
||||
|
||||
private final Object data;
|
||||
private final List<Map<String, Object>> errors;
|
||||
private final Map<String, Object> extensions;
|
||||
private final HttpHeaders httpHeaders;
|
||||
|
||||
public GraphQLResponse(Object data, List<Map<String, Object>> errors, Map<String, Object> extensions) {
|
||||
public GraphQLHttpResponse(Object data,
|
||||
List<Map<String, Object>> errors,
|
||||
Map<String, Object> extensions,
|
||||
HttpHeaders httpHeaders) {
|
||||
this.data = data;
|
||||
this.errors = errors;
|
||||
this.extensions = extensions;
|
||||
this.httpHeaders = httpHeaders;
|
||||
}
|
||||
|
||||
public Object getData() {
|
||||
@@ -26,4 +33,8 @@ public class GraphQLResponse {
|
||||
public Map<String, Object> getExtensions() {
|
||||
return extensions;
|
||||
}
|
||||
|
||||
public HttpHeaders getHttpHeaders() {
|
||||
return httpHeaders;
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public interface GraphQLInterceptor {
|
||||
return Mono.just(result);
|
||||
}
|
||||
|
||||
default Mono<GraphQLResponse> customizeResponseBody(GraphQLResponse graphQLResponse, ExecutionResult executionResult, HttpHeaders httpHeader) {
|
||||
return Mono.just(graphQLResponse);
|
||||
default Mono<GraphQLHttpResponse> customizeResponseBody(GraphQLHttpResponse graphQLHttpResponse, ExecutionResult executionResult, HttpHeaders httpHeader) {
|
||||
return Mono.just(graphQLHttpResponse);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package org.springframework.graphql;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class GraphQLRequestBody {
|
||||
private final String query;
|
||||
private final String operationName;
|
||||
private final Map<String, Object> variables;
|
||||
|
||||
public GraphQLRequestBody(String query, String operationName, Map<String, Object> variables) {
|
||||
this.query = query;
|
||||
this.operationName = operationName;
|
||||
this.variables = variables;
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
public String getOperationName() {
|
||||
return operationName;
|
||||
}
|
||||
|
||||
public Map<String, Object> getVariables() {
|
||||
return variables;
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,8 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.graphql.DefaultGraphQLInterceptor;
|
||||
import org.springframework.graphql.GraphQLHandler;
|
||||
import org.springframework.graphql.GraphQLHttpRequest;
|
||||
import org.springframework.graphql.GraphQLInterceptor;
|
||||
import org.springframework.graphql.GraphQLRequestBody;
|
||||
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||
import org.springframework.web.reactive.function.server.ServerRequest;
|
||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||
@@ -58,8 +58,13 @@ public class GraphQLController {
|
||||
if (variables == null) {
|
||||
variables = Collections.emptyMap();
|
||||
}
|
||||
GraphQLRequestBody graphQLRequestBody = new GraphQLRequestBody(query, body.getOperationName(), variables);
|
||||
return graphQLHandler.graphqlPOST(graphQLRequestBody, serverRequest.headers().asHttpHeaders());
|
||||
GraphQLHttpRequest graphQLHttpRequest = new GraphQLHttpRequest(
|
||||
query,
|
||||
body.getOperationName(),
|
||||
variables,
|
||||
serverRequest.headers().asHttpHeaders(),
|
||||
serverRequest.queryParams());
|
||||
return graphQLHandler.graphqlPOST(graphQLHttpRequest);
|
||||
}).flatMap(graphQLResponseBody -> {
|
||||
//TODO: this should be handled better:
|
||||
// we don't want to serialize `null` values for `errors` and `extensions`
|
||||
|
||||
@@ -7,8 +7,8 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.graphql.DefaultGraphQLInterceptor;
|
||||
import org.springframework.graphql.GraphQLHandler;
|
||||
import org.springframework.graphql.GraphQLHttpRequest;
|
||||
import org.springframework.graphql.GraphQLInterceptor;
|
||||
import org.springframework.graphql.GraphQLRequestBody;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.servlet.function.RequestPredicates;
|
||||
import org.springframework.web.servlet.function.RouterFunction;
|
||||
@@ -70,9 +70,14 @@ public class GraphQLController {
|
||||
variables = Collections.emptyMap();
|
||||
}
|
||||
|
||||
GraphQLRequestBody graphQLRequestBody = new GraphQLRequestBody(query, body.getOperationName(), variables);
|
||||
GraphQLHttpRequest graphQLHttpRequest = new GraphQLHttpRequest(
|
||||
query,
|
||||
body.getOperationName(),
|
||||
variables,
|
||||
serverRequest.headers().asHttpHeaders(),
|
||||
serverRequest.params());
|
||||
|
||||
Mono<Map<String, Object>> responseRawMono = graphQLHandler.graphqlPOST(graphQLRequestBody, serverRequest.headers().asHttpHeaders())
|
||||
Mono<Map<String, Object>> responseRawMono = graphQLHandler.graphqlPOST(graphQLHttpRequest)
|
||||
.map(graphQLResponseBody -> {
|
||||
//TODO: this should be handled better:
|
||||
// we don't want to serialize `null` values for `errors` and `extensions`
|
||||
|
||||
Reference in New Issue
Block a user