全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 10 分钟 ✍️ juanwangdev

Spring MVC 自定义参数解析器HandlerMethodArgumentResolver

HandlerMethodArgumentResolver 接口定义了方法参数的解析规则,可实现自定义参数的自动绑定。

接口定义

Java
public interface HandlerMethodArgumentResolver {
    boolean supportsParameter(MethodParameter parameter);
    Object resolveArgument(MethodParameter parameter,
                           ModelAndViewContainer mavContainer,
                           NativeWebRequest webRequest,
                           WebDataBinderFactory binderFactory) throws Exception;
}

核心方法

方法作用
supportsParameter判断是否支持该参数类型
resolveArgument解析并返回参数值

自定义参数解析器

Java
public class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(CurrentUser.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter,
                                   ModelAndViewContainer mavContainer,
                                   NativeWebRequest webRequest,
                                   WebDataBinderFactory binderFactory) {
        HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
        HttpSession session = request.getSession(false);

        if (session != null) {
            return session.getAttribute("currentUser");
        }
        return null;
    }
}

自定义注解标记

Java
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUser {
}

控制器使用

Java
@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/profile")
    public User getProfile(@CurrentUser User user) {
        return user;
    }
}

注册参数解析器

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new CurrentUserArgumentResolver());
    }
}

内置解析器

解析器支持参数
RequestParamMethodArgumentResolver@RequestParam
PathVariableMethodArgumentResolver@PathVariable
ServletModelAttributeMethodArgumentResolver@ModelAttribute
RequestResponseBodyMethodProcessor@RequestBody

解析器按注册顺序匹配,自定义解析器优先于默认解析器。

要点总结

  • supportsParameter 返回 true 时才调用 resolveArgument
  • 可配合自定义注解标记需要解析的参数
  • 通过 WebMvcConfigurer#addArgumentResolvers 注册
  • 返回值直接作为方法参数值注入

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring MVC 自定义MessageConverter消息转换器
下一篇 → Spring MVC 自定义HandlerAdapter处理器适配器
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库