使用HandlerMethodArgumentResolver在 Controller 方法参数中 自动注入自定义对象
需求:
-
希望 直接在
Controller方法参数中 自动注入自定义对象,而不影响请求的 URL 或 Body。 -
适用于 所有
@RequestMapping方法,且不需要手动修改请求。
解决方法:
使用 HandlerMethodArgumentResolver
1. 创建自定义对象
假设你要自动注入 Use他Info:
@Data @AllArgsConstructor @NoArgsConstructor public class UserInfo { private String requestId; private String userName; private String userId; private String ipAddress; }
2. 创建 HandlerMethodArgumentResolver
编写 UserInfoResolver,解析 每个请求 并创建 UserInfo:
@Component public class UserInfoResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { // 只解析 `UserInfo` 类型的参数 return parameter.getParameterType().equals(UserInfo.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(); return new UserInfo( UUID.randomUUID().toString(), request.getHeader("X-User-Name"), request.getHeader("X-User-Id"), request.getRemoteAddr() ); } }
3. 在 WebMvcConfigurer 里注册解析器

浙公网安备 33010602011771号