java / expert
Snippet
Benutzerdefinierte Controller-Argument-Auflösung mit HandlerMethodArgumentResolver
Der HandlerMethodArgumentResolver ermöglicht das Injizieren benutzerdefinierter Objekte in Controller-Methoden, indem er diese aus dem Web-Request-Kontext auflöst. Dies ist äußerst nützlich, um Sicherheits-Prinzipale oder spezialisierte Sitzungsdaten zu extrahieren, ohne die Controller-Logik zu überladen.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Componentpublic class CurrentUserResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.hasParameterAnnotation(CurrentUser.class) &¶meter.getParameterType().equals(UserAccount.class);}@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();return request.getAttribute("authenticated_user");}}
spring
Erklärung
1
supportsParameter(...)
Bestimmt, ob der Resolver basierend auf dem Parametertyp und den Annotationen anwendbar ist.
2
resolveArgument(...)
Führt die tatsächliche Logik aus, um das Objekt zu extrahieren oder zu konstruieren, das in die Methode injiziert werden soll.