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 {@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.hasParameterAnnotation(CsvHeaderArray.class) &¶meter.getParameterType().equals(String[].class);}@Overridepublic 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.