0 Tage Serie
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
@Component
public class CurrentUserResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(CurrentUser.class) &&
parameter.getParameterType().equals(UserAccount.class);
}
@Override
public 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.