rest-schemagen
rest-schemagen copied to clipboard
Query Parameters not encoded correctly
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)
Hi @JoergAdler would you have a look? Thx! #belohnungseis
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.