Skip to content

UriComponentsBuilder.toUriString() is broken [SPR-17630] #22161

Closed
@spring-projects-issues

Description

@spring-projects-issues

rougou opened SPR-17630 and commented

UriComponentsBuilder.toUriString() (and possibly UriComponentsBuilder.encode()) is broken as of 5.0.8.

The code was changed from 

return build(false).encode().toUriString();

 to

return encode().build().toUriString();

without any change to the javadoc.

There are 2 problems with this (other than the javadoc issue)

  1. UriComponentsBuilder itself gets mutated by calling toUriString(), which is unexpected behavior.
  2. If you have a query param value with curly braces such as "{{{{", an IllegalStateException will now be thrown. If you have a closing brace such as "{{{}", no exception will be thrown but it won't be url-encoded, either.

On top of that, the javadoc for UriComponentsBuilder.encode() basically says it will give the expected result while UriComponents.encode() will not, but not encoding braces and throwing IllegalStateExceptions is obviously not the expected result. It seems the variable expansion mechanism introduced is affecting behavior even when this feature is not used.

 

 


Affects: 5.0.8, 5.1.1

Issue Links:

Referenced from: commits b219c6c, 5aa131a, 124e817, dc3f953, c6e5008, 6398480

Backported to: 5.0.12

Metadata

Metadata

Assignees

Labels

in: webIssues in web modules (web, webmvc, webflux, websocket)status: backportedAn issue that has been backported to maintenance branchestype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions