0 Tage Serie
java / expert
Snippet

Benutzerdefinierter HandlerMethodArgumentResolver für typisierte Request-Header-Arrays

Benutzerdefinierte `HandlerMethodArgumentResolver`-Implementierungen ermöglichen es Spring MVC-Anwendungen, rohe HTTP-Header oder Parameter automatisch in komplexe Java-Datenstrukturen umzuwandeln, wie z. B. das direkte Parsen von kommagetrennten Werten in typisierte Java-`String[]`-Arrays.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class StringArrayHeaderResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(CsvHeaderArray.class) &&
parameter.getParameterType().equals(String[].class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
String headerValue = webRequest.getHeader(parameter.getParameterAnnotation(CsvHeaderArray.class).value());
return headerValue != null ? headerValue.split("\\s*,\\s*") : new String[0];
}
}
spring
Erklärung
1
public class StringArrayHeaderResolver implements HandlerMethodArgumentResolver
Implementiert den Spring MVC SPI-Vertrag zur Auflösung benutzerdefinierter Controller-Methodenargumente.
2
parameter.hasParameterAnnotation(CsvHeaderArray.class) && parameter.getParameterType().equals(String[].class)
Prüft, ob der Zielparameter die benutzerdefinierte Annotation besitzt und ein String-Array erwartet.
3
String headerValue = webRequest.getHeader(parameter.getParameterAnnotation(CsvHeaderArray.class).value());
Liest den rohen Header-String-Wert aus dem aktuellen Web-Request-Kontext aus.
4
return headerValue != null ? headerValue.split("\\s*,\\s*") : new String[0];
Teilt den CSV-String per RegEx in ein sauberes String-Array auf oder gibt ein leeres Array zurück.