java / expert
Snippet
Custom HandlerMethodArgumentResolver for Domain Objects
ArgumentResolvers allow you to inject custom domain objects directly into Controller methods, keeping controller logic clean and focused on orchestration rather than data retrieval from headers or sessions.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Componentpublic class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.getParameterType().equals(UserAccount.class);}@Overridepublic Object resolveArgument(MethodParameter parameter,ModelAndViewContainer mavContainer,NativeWebRequest webRequest,WebDataBinderFactory binderFactory) {String userId = webRequest.getHeader("X-User-Id");return userRepository.findById(userId).orElseThrow();}}
spring
Breakdown
1
supportsParameter(MethodParameter parameter)
Checks if the resolver can handle the specific method argument type.
2
resolveArgument(...)
Logic to extract data from the request and return the object to be injected.