java
19 lines · 5 steps
Building URIs safely with UriComponentsBuilder in Spring
How Spring's fluent builder assembles an encoded search URL from query, paging, and optional parameters.
Explained by
highlit
1public URI buildSearchUri(String query, int page, int size, List<String> tags) {
2 UriComponentsBuilder builder = UriComponentsBuilder
3 .fromUriString("https://api.example.com")
4 .path("/v2/products/search")
5 .queryParam("q", query)
6 .queryParam("page", page)
7 .queryParam("size", size)
8 .queryParam("sort", "relevance,desc");
9
10 if (tags != null && !tags.isEmpty()) {
11 builder.queryParam("tag", tags.toArray());
12 }
13
14 return builder
15 .queryParamIfPresent("currency", Optional.ofNullable(defaultCurrency))
16 .encode(StandardCharsets.UTF_8)
17 .build()
18 .toUri();
19}
01 / 01
STEP 01
‹ swipe to step through ›
Walkthrough
Space play
←→ step
click any line
Three takeaways
- 1A fluent builder lets you compose a URL declaratively instead of concatenating fragile strings.
- 2Encoding once at build time via encode() prevents malformed URLs from unescaped user input.
- 3queryParamIfPresent and Optional express conditional parameters without scattering null checks.
Related explainers
java
public final class NaturalOrderComparator implements Comparator<String> { public static final NaturalOrderComparator INSTANCE = new NaturalOrderComparator();
Natural-order string sorting in Java
comparator
natural-sort
string-parsing
Intermediate
9 steps
java
package com.example.validation; import java.util.List; import java.util.stream.Collectors;
Validating JSON payloads against a schema in Java
json-schema
validation
recursion
Intermediate
8 steps
java
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
Real-time chat over STOMP WebSockets in Spring
websockets
stomp
messaging
Intermediate
8 steps
java
@Configuration @EnableRedisHttpSession(namespace = "myapp:sessions", maxInactiveIntervalInSeconds = 1800, flushMode = FlushMode.IMMEDIATE) public class SessionConfig {
Backing HTTP sessions with Redis in Spring
session-management
redis
distributed-state
Intermediate
7 steps
java
public List<User> findUsersByEmailDomain(String domain, int minAge) { String sql = """ SELECT id, username, email, age, created_at FROM users
Safe parameterized JDBC queries in Java
jdbc
sql-injection
prepared-statement
Intermediate
7 steps
java
@Configuration @EnableBatchProcessing public class CustomerImportJobConfig {
How a chunk-based CSV import job works in Spring
batch-processing
etl
csv-parsing
Intermediate
9 steps
Share this explainer
Here's the card — post it anywhere.
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code
Embed this explainer
Drop the interactive walkthrough into a blog or docs. Views never cost a credit.
<iframe src="https://highlit.co/explainers/building-uris-safely-with-uricomponentsbuilder-in-spring-explained-java-6e9b/embed?autoplay=1" width="100%" height="520" loading="lazy" style="border:0"></iframe>
Autoplay is on by default — add ?autoplay=0 to start paused.