0 Tage Serie
java / intermediate
Snippet

Benutzerdefiniertes Array-Binding mit generischem StringToCollectionConverter

Das Converter-SPI von Spring wandelt rohe HTTP-Anfrageparameter direkt in typisierte Arrays oder Objekte um. Die Implementierung von Converter<String, Integer[]> registriert eine automatische Konvertierung für semikolongetrennte Query-Parameter, wodurch manuelles Splitten in Controller-Methoden entfällt.

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
Erklärung
1
public class DelimitedIntegerArrayConverter implements Converter<String, Integer[]>
Definiert eine typisierte Konvertierungsstrategie, die im zentralen ConversionService von Spring registriert wird.
2
.toArray(Integer[]::new);
Erzeugt über eine Konstruktor-Referenz ein typisiertes Wrapper-Array aus den Elementen des Streams.
3
public ResponseEntity<Integer> sumMetricIds(@RequestParam("ids") Integer[] metricIds)
Der Controller empfängt direkt ein fertig geparstes Integer-Array aus dem Parameter der HTTP-Anfrage.