From efd08b3451d57c32784ef25469312f93bcdbf7ad Mon Sep 17 00:00:00 2001 From: Johan Nilsson Date: Tue, 22 Nov 2016 09:20:56 +0100 Subject: [PATCH] Change to handle variables sent as an empty string to graphql endpoint Fix #2367 --- .../org/opentripplanner/index/IndexAPI.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/index/IndexAPI.java b/src/main/java/org/opentripplanner/index/IndexAPI.java index 807aa47feda..c95c6311d89 100644 --- a/src/main/java/org/opentripplanner/index/IndexAPI.java +++ b/src/main/java/org/opentripplanner/index/IndexAPI.java @@ -585,20 +585,24 @@ public Response getStopCluster (@PathParam("clusterId") String clusterIdString) @POST @Path("/graphql") @Consumes(MediaType.APPLICATION_JSON) - public Response getGraphQL (HashMap query) { + public Response getGraphQL (HashMap queryParameters) { + String query = (String) queryParameters.get("query"); + Object queryVariables = queryParameters.getOrDefault("variables", null); + String operationName = (String) queryParameters.getOrDefault("operationName", null); Map variables; - if (query.get("variables") instanceof Map) { - variables = (Map) query.get("variables"); - } else { + if (queryVariables instanceof Map) { + variables = (Map) queryVariables; + } else if (queryVariables instanceof String && !((String) queryVariables).isEmpty()) { try { - variables = deserializer.readValue((String) query.get("variables"), Map.class); + variables = deserializer.readValue((String) queryVariables, Map.class); } catch (IOException e) { LOG.error("Variables must be a valid json object"); return Response.status(Status.BAD_REQUEST).entity(MSG_400).build(); } + } else { + variables = new HashMap<>(); } - String operationName = (String) query.getOrDefault("operationName", null); - return index.getGraphQLResponse((String) query.get("query"), variables, operationName); + return index.getGraphQLResponse(query, variables, operationName); } @POST