Skip to content

Commit 27b3975

Browse files
ronald-d-rogersapottere
authored andcommitted
Fixed error serializing requests with extensions (#63) (#64)
1 parent 8d6181f commit 27b3975

File tree

2 files changed

+130
-0
lines changed

2 files changed

+130
-0
lines changed

src/main/java/graphql/servlet/GraphQLServlet.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package graphql.servlet;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
34
import com.fasterxml.jackson.core.JsonParser;
45
import com.fasterxml.jackson.core.type.TypeReference;
56
import com.fasterxml.jackson.databind.DeserializationContext;
@@ -480,6 +481,7 @@ private Boolean isArrayStart(String s) {
480481
return null;
481482
}
482483

484+
@JsonIgnoreProperties(ignoreUnknown = true)
483485
protected static class GraphQLRequest {
484486
private String query;
485487
@JsonDeserialize(using = GraphQLServlet.VariablesDeserializer.class)
@@ -511,6 +513,7 @@ public void setOperationName(String operationName) {
511513
}
512514
}
513515

516+
@JsonIgnoreProperties(ignoreUnknown = true)
514517
protected static class GraphQLResponse {
515518
private int status;
516519
private String response;

src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,20 @@ class GraphQLServletSpec extends Specification {
169169
getResponseContent().data.echo == "test"
170170
}
171171

172+
def "query over HTTP GET with unknown property 'test' returns data"() {
173+
setup:
174+
request.addParameter('query', 'query { echo(arg:"test") }')
175+
request.addParameter('test', 'test')
176+
177+
when:
178+
servlet.doGet(request, response)
179+
180+
then:
181+
response.getStatus() == STATUS_OK
182+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
183+
getResponseContent().data.echo == "test"
184+
}
185+
172186
def "batched query over HTTP GET returns data"() {
173187
setup:
174188
request.addParameter('query', '[{ "query": "query { echo(arg:\\"test\\") }" }, { "query": "query { echo(arg:\\"test\\") }" }]')
@@ -239,6 +253,20 @@ class GraphQLServletSpec extends Specification {
239253
getBatchedResponseContent()[1].data.echo == "test"
240254
}
241255

256+
def "batched query over HTTP GET with unknown property 'test' returns data"() {
257+
setup:
258+
request.addParameter('query', '[{ "query": "query { echo(arg:\\"test\\") }", "test": "test" }, { "query": "query { echo(arg:\\"test\\") }", "test": "test" }]')
259+
260+
when:
261+
servlet.doGet(request, response)
262+
263+
then:
264+
response.getStatus() == STATUS_OK
265+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
266+
getBatchedResponseContent()[0].data.echo == "test"
267+
getBatchedResponseContent()[1].data.echo == "test"
268+
}
269+
242270
def "mutation over HTTP GET returns errors"() {
243271
setup:
244272
request.addParameter('query', 'mutation { echo(arg:"test") }')
@@ -338,6 +366,22 @@ class GraphQLServletSpec extends Specification {
338366
getResponseContent().data.echo == "test"
339367
}
340368

369+
def "query over HTTP POST body with unknown property 'test' returns data"() {
370+
setup:
371+
request.setContent(mapper.writeValueAsBytes([
372+
query: 'query { echo(arg:"test") }',
373+
test: 'test'
374+
]))
375+
376+
when:
377+
servlet.doPost(request, response)
378+
379+
then:
380+
response.getStatus() == STATUS_OK
381+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
382+
getResponseContent().data.echo == "test"
383+
}
384+
341385
def "query over HTTP POST multipart named 'graphql' returns data"() {
342386
setup:
343387
request.setContentType("multipart/form-data, boundary=test")
@@ -428,6 +472,24 @@ class GraphQLServletSpec extends Specification {
428472
getResponseContent().data.echo == "test"
429473
}
430474

475+
def "query over HTTP POST multipart named 'query' with unknown property 'test' returns data"() {
476+
setup:
477+
request.setContentType("multipart/form-data, boundary=test")
478+
request.setMethod("POST")
479+
request.setContent(new TestMultipartContentBuilder()
480+
.addPart('query', 'query { echo(arg:"test") }')
481+
.addPart('test', 'test')
482+
.build())
483+
484+
when:
485+
servlet.doPost(request, response)
486+
487+
then:
488+
response.getStatus() == STATUS_OK
489+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
490+
getResponseContent().data.echo == "test"
491+
}
492+
431493
def "batched query over HTTP POST body returns data"() {
432494
setup:
433495
request.setContent('[{ "query": "query { echo(arg:\\"test\\") }" }, { "query": "query { echo(arg:\\"test\\") }" }]'.bytes)
@@ -486,6 +548,20 @@ class GraphQLServletSpec extends Specification {
486548
getBatchedResponseContent()[1].data.echo == "test"
487549
}
488550

551+
def "batched query over HTTP POST body with unknown property 'test' returns data"() {
552+
setup:
553+
request.setContent('[{ "query": "query { echo(arg:\\"test\\") }", "test": "test" }, { "query": "query { echo(arg:\\"test\\") }", "test": "test" }]'.bytes)
554+
555+
when:
556+
servlet.doPost(request, response)
557+
558+
then:
559+
response.getStatus() == STATUS_OK
560+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
561+
getBatchedResponseContent()[0].data.echo == "test"
562+
getBatchedResponseContent()[1].data.echo == "test"
563+
}
564+
489565
def "batched query over HTTP POST multipart named 'graphql' returns data"() {
490566
setup:
491567
request.setContentType("multipart/form-data, boundary=test")
@@ -505,6 +581,25 @@ class GraphQLServletSpec extends Specification {
505581
getBatchedResponseContent()[1].data.echo == "test"
506582
}
507583

584+
def "batched query over HTTP POST multipart named 'graphql' with unknown property 'test' returns data"() {
585+
setup:
586+
request.setContentType("multipart/form-data, boundary=test")
587+
request.setMethod("POST")
588+
589+
request.setContent(new TestMultipartContentBuilder()
590+
.addPart('graphql', '[{ "query": "query { echo(arg:\\"test\\") }", "test": "test" }, { "query": "query { echo(arg:\\"test\\") }", "test": "test" }]')
591+
.build())
592+
593+
when:
594+
servlet.doPost(request, response)
595+
596+
then:
597+
response.getStatus() == STATUS_OK
598+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
599+
getBatchedResponseContent()[0].data.echo == "test"
600+
getBatchedResponseContent()[1].data.echo == "test"
601+
}
602+
508603
def "batched query over HTTP POST multipart named 'query' returns data"() {
509604
setup:
510605
request.setContentType("multipart/form-data, boundary=test")
@@ -579,6 +674,24 @@ class GraphQLServletSpec extends Specification {
579674
getBatchedResponseContent()[1].data.echo == "test"
580675
}
581676

677+
def "batched query over HTTP POST multipart named 'query' with unknown property 'test' returns data"() {
678+
setup:
679+
request.setContentType("multipart/form-data, boundary=test")
680+
request.setMethod("POST")
681+
request.setContent(new TestMultipartContentBuilder()
682+
.addPart('query', '[{ "query": "query { echo(arg:\\"test\\") }", "test": "test" }, { "query": "query { echo(arg:\\"test\\") }", "test": "test" }]')
683+
.build())
684+
685+
when:
686+
servlet.doPost(request, response)
687+
688+
then:
689+
response.getStatus() == STATUS_OK
690+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
691+
getBatchedResponseContent()[0].data.echo == "test"
692+
getBatchedResponseContent()[1].data.echo == "test"
693+
}
694+
582695
def "mutation over HTTP POST body returns data"() {
583696
setup:
584697
request.setContent(mapper.writeValueAsBytes([
@@ -608,6 +721,20 @@ class GraphQLServletSpec extends Specification {
608721
getBatchedResponseContent()[1].data.echo == "test"
609722
}
610723

724+
def "batched mutation over HTTP POST body with unknown property 'test' returns data"() {
725+
setup:
726+
request.setContent('[{ "query": "mutation { echo(arg:\\"test\\") }", "test": "test" }, { "query": "mutation { echo(arg:\\"test\\") }", "test": "test" }]'.bytes)
727+
728+
when:
729+
servlet.doPost(request, response)
730+
731+
then:
732+
response.getStatus() == STATUS_OK
733+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
734+
getBatchedResponseContent()[0].data.echo == "test"
735+
getBatchedResponseContent()[1].data.echo == "test"
736+
}
737+
611738
def "errors before graphql schema execution return internal server error"() {
612739
setup:
613740
servlet = new SimpleGraphQLServlet(servlet.getSchemaProvider().getSchema()) {

0 commit comments

Comments
 (0)