-
Notifications
You must be signed in to change notification settings - Fork 571
Description
- Framework version: 1.0
- Implementations: Jersey
Scenario
When the JerseyHandlerFilter handles requests that contain encoded + signs in query parameters it breaks the encoding. As a result, such a query parameter retrieved via @QueryParam in an endpoint is wrongly decoded. As an example, the parameter param=p%2Fz%2B3 of the original request is decoded as param=p/z 3 via the @QueryParam.
Though, the same query parameter that is retrieved as HttpServletRequest#getParameter is properly decoded. The difference is that the serverless contained gets the query parameter directly from the AwsProxyRequest without intermediate decoding/encoding actions.
Expected behavior
Original query parameter param=p%2Fz%2B3 of a request should be retrieved as follows:
@QueryParam("param") String param-> "p/z+3"@QueryParam("param") @Encoded String param-> "p%2Fz%2B3"request.getParameter("param")-> "p/z+3"
Actual behavior
@QueryParam("param") String param-> "p/z 3"@QueryParam("param") @Encoded String param-> "p%2Fz+3"request.getParameter("param")-> "p/z+3"
Steps to reproduce
Create an endpoint
@GET
@Path("/test")
public Response getAll(@QueryParam("param") String param) {
...
}
Run the code in AWS Lambda or locally in SAM Local. Then, try to GET /test?param=p%2Fz%2B3