-
Notifications
You must be signed in to change notification settings - Fork 570
Closed
Description
- Framework version: 1.1
- Implementations: Jersey
Scenario
I have a GET endpoint that takes in a String query parameter:
@GET
@Path("/search")
@Produces(MediaType.APPLICATION_JSON)
public Response list(@QueryParam("query") String queryStr) throws IOException {
Map<String, String> response = new HashMap<>();
response.put("body", queryStr);
return Response.status(200).entity(response).build();
}
}When the endpoint is called with a simple string as a parameter it works as expected. For example .../search?query=helloWorld would work as expected. However, when the function is called with a JSON string as a parameter I am seeing an IllegalArgumentException. Making this call .../search?query={"name":"faisal"} would throw this error:
java.lang.IllegalArgumentException: Illegal character """ at position 7 is not allowed as a start of a name in a path template "query={"name":"faisal"}".
Expected behavior
The JSON string should be parsed as a string.
Actual behavior
The JSON string causes an IllegalArgumentException.
Steps to reproduce
- Define a GET endpoint that takes in a string as a query parameter
- Call endpoint with the parameter set to a JSON string.
Full log output
4310 [main] ERROR com.amazonaws.serverless.proxy.internal.LambdaContainerHandler - Error while handling request
java.lang.IllegalArgumentException: Illegal character """ at position 7 is not allowed as a start of a name in a path template "query={"name":"faisal"}".
at org.glassfish.jersey.uri.internal.UriTemplateParser.parseName(UriTemplateParser.java:331)
at org.glassfish.jersey.uri.internal.UriTemplateParser.parse(UriTemplateParser.java:256)
at org.glassfish.jersey.uri.internal.UriTemplateParser.<init>(UriTemplateParser.java:115)
at org.glassfish.jersey.uri.UriTemplate.createUriComponent(UriTemplate.java:1004)
at org.glassfish.jersey.uri.UriTemplate.createURIWithStringValues(UriTemplate.java:970)
at org.glassfish.jersey.uri.UriTemplate.createURIWithStringValues(UriTemplate.java:906)
at org.glassfish.jersey.uri.UriTemplate.createURI(UriTemplate.java:871)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder._build(JerseyUriBuilder.java:914)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder.build(JerseyUriBuilder.java:831)
at com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.servletRequestToContainerRequest(JerseyHandlerFilter.java:141)
at com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.doFilter(JerseyHandlerFilter.java:86)
at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:84)
at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:207)
at com.amazonaws.serverless.proxy.jersey.JerseyLambdaContainerHandler.handleRequest(JerseyLambdaContainerHandler.java:171)
at com.amazonaws.serverless.proxy.jersey.JerseyLambdaContainerHandler.handleRequest(JerseyLambdaContainerHandler.java:75)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:168)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:200)
at com.lithium.tocoma.reach.handlers.AssetHandler.handleRequest(AssetHandler.java:23)
at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:283)
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94)
4316 [main] ERROR com.amazonaws.serverless.proxy.AwsProxyExceptionHandler - Called exception handler for:
java.lang.IllegalArgumentException: Illegal character """ at position 7 is not allowed as a start of a name in a path template "query={"name":"faisal"}".
at org.glassfish.jersey.uri.internal.UriTemplateParser.parseName(UriTemplateParser.java:331)
at org.glassfish.jersey.uri.internal.UriTemplateParser.parse(UriTemplateParser.java:256)
at org.glassfish.jersey.uri.internal.UriTemplateParser.<init>(UriTemplateParser.java:115)
at org.glassfish.jersey.uri.UriTemplate.createUriComponent(UriTemplate.java:1004)
at org.glassfish.jersey.uri.UriTemplate.createURIWithStringValues(UriTemplate.java:970)
at org.glassfish.jersey.uri.UriTemplate.createURIWithStringValues(UriTemplate.java:906)
at org.glassfish.jersey.uri.UriTemplate.createURI(UriTemplate.java:871)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder._build(JerseyUriBuilder.java:914)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder.build(JerseyUriBuilder.java:831)
at com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.servletRequestToContainerRequest(JerseyHandlerFilter.java:141)
at com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.doFilter(JerseyHandlerFilter.java:86)
at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:84)
at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:207)
at com.amazonaws.serverless.proxy.jersey.JerseyLambdaContainerHandler.handleRequest(JerseyLambdaContainerHandler.java:171)
at com.amazonaws.serverless.proxy.jersey.JerseyLambdaContainerHandler.handleRequest(JerseyLambdaContainerHandler.java:75)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:168)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:200)
at com.lithium.tocoma.reach.handlers.AssetHandler.handleRequest(AssetHandler.java:23)
at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:283)
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94)
java.lang.IllegalArgumentException: Illegal character """ at position 7 is not allowed as a start of a name in a path template "query={"name":"faisal"}".
at org.glassfish.jersey.uri.internal.UriTemplateParser.parseName(UriTemplateParser.java:331)
at org.glassfish.jersey.uri.internal.UriTemplateParser.parse(UriTemplateParser.java:256)
at org.glassfish.jersey.uri.internal.UriTemplateParser.<init>(UriTemplateParser.java:115)
at org.glassfish.jersey.uri.UriTemplate.createUriComponent(UriTemplate.java:1004)
at org.glassfish.jersey.uri.UriTemplate.createURIWithStringValues(UriTemplate.java:970)
at org.glassfish.jersey.uri.UriTemplate.createURIWithStringValues(UriTemplate.java:906)
at org.glassfish.jersey.uri.UriTemplate.createURI(UriTemplate.java:871)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder._build(JerseyUriBuilder.java:914)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder.build(JerseyUriBuilder.java:831)
at com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.servletRequestToContainerRequest(JerseyHandlerFilter.java:141)
at com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.doFilter(JerseyHandlerFilter.java:86)
at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:84)
at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:207)
at com.amazonaws.serverless.proxy.jersey.JerseyLambdaContainerHandler.handleRequest(JerseyLambdaContainerHandler.java:171)
at com.amazonaws.serverless.proxy.jersey.JerseyLambdaContainerHandler.handleRequest(JerseyLambdaContainerHandler.java:75)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:168)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:200)
at com.lithium.tocoma.reach.handlers.AssetHandler.handleRequest(AssetHandler.java:23)
at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:283)
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94)