0 day streak
java / intermediate
Snippet

Custom Delimited Array Binding with Generic StringToCollectionConverter

Spring's Converter SPI converts raw HTTP request parameters directly into typed arrays or custom objects. Implementing Converter<String, Integer[]> registers an automatic binding mechanism for semicolon-delimited query parameters without requiring repetitive string splitting across multiple controller methods.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Component
public class DelimitedIntegerArrayConverter implements Converter<String, Integer[]> {
@Override
public Integer[] convert(String source) {
if (source == null || source.isBlank()) {
return new Integer[0];
}
return Arrays.stream(source.split(";"))
.map(String::trim)
.filter(Predicate.not(String::isEmpty))
.map(Integer::valueOf)
.toArray(Integer[]::new);
}
}
@RestController
@RequestMapping("/api/metrics")
public class MetricsController {
@GetMapping
public ResponseEntity<Integer> sumMetricIds(@RequestParam("ids") Integer[] metricIds) {
int total = Arrays.stream(metricIds).mapToInt(Integer::intValue).sum();
return ResponseEntity.ok(total);
}
}
spring
Breakdown
1
public class DelimitedIntegerArrayConverter implements Converter<String, Integer[]>
Defines a custom type-conversion strategy registered within Spring's core conversion service.
2
.toArray(Integer[]::new);
Constructs a typed primitive wrapper array from the intermediate stream elements using a constructor reference.
3
public ResponseEntity<Integer> sumMetricIds(@RequestParam("ids") Integer[] metricIds)
The controller receives a ready-to-use Integer array parsed directly from a delimited request parameter string.