rest-schemagen icon indicating copy to clipboard operation
rest-schemagen copied to clipboard

Query Parameters not encoded correctly

Open leflamm opened this issue 7 years ago • 2 comments

When creating a Link for a Response, query parameters are not encoded correctly.

Easiest way to reproduce: try to pass some Json {"key": "value"} as a query parameter value.

java.lang.IllegalArgumentException: Illegal character """ at position 5 is not allowed as a start of a name in a path template "fq={ "foo": {"bar": "zort","narf": "poit" }}".
at org.glassfish.jersey.uri.internal.UriTemplateParser.parseName(UriTemplateParser.java:330)
at org.glassfish.jersey.uri.internal.UriTemplateParser.parse(UriTemplateParser.java:255)
at org.glassfish.jersey.uri.internal.UriTemplateParser.<init>(UriTemplateParser.java:114)
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:827)
at org.glassfish.jersey.uri.UriTemplate.createURI(UriTemplate.java:790)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder._buildFromMap(JerseyUriBuilder.java:822)
at org.glassfish.jersey.uri.internal.JerseyUriBuilder.buildFromMap(JerseyUriBuilder.java:801)
at com.mercateo.common.rest.schemagen.link.LinkCreator.mergeUri(LinkCreator.java:125)
at com.mercateo.common.rest.schemagen.link.LinkCreator.createFor(LinkCreator.java:110)
at com.mercateo.common.rest.schemagen.link.LinkCreator.createFor(LinkCreator.java:79)
at com.mercateo.common.rest.schemagen.link.LinkFactory.forCall(LinkFactory.java:143)
at com.mercateo.common.rest.schemagen.link.LinkFactory.forCall(LinkFactory.java:124)
at com.mercateo.common.rest.schemagen.link.LinkFactory.forCall(LinkFactory.java:64)
at com.mercateo.content.articleservice.rest.resource.article.ArticlesResource.lambda$createPaginatedResponse$2(ArticlesResource.java:166)
at com.mercateo.common.rest.schemagen.PaginationLinkBuilder.createSelfLink(PaginationLinkBuilder.java:50)
at com.mercateo.common.rest.schemagen.PaginationLinkBuilder.generateLinks(PaginationLinkBuilder.java:40)
at com.mercateo.common.rest.schemagen.types.PaginatedResponseBuilder.build(PaginatedResponseBuilder.java:44)

leflamm avatar Nov 15 '17 08:11 leflamm

Hi @JoergAdler would you have a look? Thx! #belohnungseis

leflamm avatar Nov 15 '17 08:11 leflamm

We already have seen this here. This is expected to be an expensive fix, as we would have to fix the internals of the Jersey URI Builder. Unfortunately the opening curly brace of JSON data starts the parsing of a template parameter, which should not contain quotes.

https://stackoverflow.com/a/46186894 gives a workaround using a temporary template parameter which is resolved immediately.

wuan avatar Dec 05 '17 07:12 wuan