[JAVA] Codieren Sie Abfrageparameter im Frühjahr mit Uri Components Builder

Umgebung

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
	</parent>

Codierungsanweisungen

Weisen Sie die Codierung mit encode </ code> an.

URI target = UriComponentsBuilder.newInstance()
        .scheme("http")
        .host("example.com")
        .queryParam("foo", "b&r")
        .build()
        .encode()
        .toUri();
System.out.println(target);// http://example.com?foo=b%26r

Um fromUri </ code> in einer codierten URL zu verwenden, geben Sie true </ code> im Build (boolesch codiert) </ code> an.

URI source = new URI("http://example.com?foo=b%26r");
URI target = UriComponentsBuilder
        .fromUri(source)
        .build(true)
        .toUri();
System.out.println(target);// http://example.com?foo=b%26r

Ich war süchtig nach

Wenn encode </ code> nicht angegeben ist, wird keine Codierung durchgeführt.

URI target = UriComponentsBuilder.newInstance()
        .scheme("http")
        .host("example.com")
        .queryParam("foo", "b&r")
        .build()
        .toUri();
System.out.println(target); // http://example.com?foo=b&r

Wenn Sie eine codierte URL mit fromUri </ code> übergeben und nicht true </ code> für build (boolean encoded) </ code> angeben, erfolgt die Codierung. Infolgedessen wird eine Doppelcodierung </ b> durchgeführt.

URI source = new URI("http://example.com?foo=b%26r");
URI target = UriComponentsBuilder
        .fromUri(source)
        .build()
        .toUri();
System.out.println(target);// http://example.com?foo=b%2526r

Referenz

[SPR-14256] Doc: UriComponentsBuilder does not encode query parameters - Spring JIRA