0 day streak
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
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Component
public class UserContextResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(UserContext.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavc, NativeWebRequest request, WebDataBinderFactory dbf) {
String userId = request.getHeader("X-User-ID");
return new UserContext(userId);
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired private UserContextResolver userContextResolver;
@Override
public 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.