java / intermediate
Snippet
Custom HandlerMethodArgumentResolver for Clean Controllers
Custom argument resolvers allow you to automatically inject complex objects into controller methods based on request data like headers or session attributes. This keeps your controllers clean and removes repetitive boiler-plate code for extracting common data.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Componentpublic class UserContextResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.getParameterType().equals(UserContext.class);}@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavc, NativeWebRequest request, WebDataBinderFactory dbf) {String userId = request.getHeader("X-User-ID");return new UserContext(userId);}}@Configurationpublic class WebConfig implements WebMvcConfigurer {@Autowired private UserContextResolver userContextResolver;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(userContextResolver);}}
spring
Breakdown
1
supportsParameter(MethodParameter parameter)
Checks if the resolver supports the specific method parameter type.
2
resolveArgument(...)
The logic to extract data from the request and construct the argument object.
3
addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers)
Registers the custom resolver within the Spring MVC configuration.