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

Spring MVC 自定义HandlerAdapter处理器适配器

HandlerAdapter 接口定义了处理器的执行方式,DispatcherServlet 通过它调用处理器并返回 ModelAndView。

接口定义

Java
public interface HandlerAdapter {
    boolean supports(Object handler);
    ModelAndView handle(HttpServletRequest request,
                        HttpServletResponse response,
                        Object handler) throws Exception;
    long getLastModified(HttpServletRequest request, Object handler);
}

核心方法

方法作用
supports判断是否支持该处理器类型
handle执行处理器并返回 ModelAndView
getLastModified返回最后修改时间(用于缓存)

自定义处理器适配器

Java
@Component
public class CustomHandlerAdapter implements HandlerAdapter {

    @Override
    public boolean supports(Object handler) {
        return handler instanceof CustomController;
    }

    @Override
    public ModelAndView handle(HttpServletRequest request,
                                 HttpServletResponse response,
                                 Object handler) throws Exception {
        CustomController controller = (CustomController) handler;

        String result = controller.execute(request, response);

        ModelAndView mav = new ModelAndView();
        mav.setViewName(result);
        mav.addObject("request", request);
        return mav;
    }

    @Override
    public long getLastModified(HttpServletRequest request, Object handler) {
        return -1; // 不支持缓存
    }
}

自定义处理器示例

Java
public interface CustomController {
    String execute(HttpServletRequest request, HttpServletResponse response);
}

public class HelloController implements CustomController {

    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("message", "Hello Custom MVC");
        return "hello";
    }
}

内置适配器

适配器支持处理器类型
RequestMappingHandlerAdapter@RequestMapping 方法
HttpRequestHandlerAdapterHttpRequestHandler
SimpleControllerHandlerAdapterController 接口
ServletHandlerAdapterServlet

注册自定义适配器

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public CustomHandlerAdapter customHandlerAdapter() {
        return new CustomHandlerAdapter();
    }
}

HandlerAdapter 与 HandlerMapping 配合使用,映射器决定用哪个处理器,适配器决定如何调用。

要点总结

  • supports 方法匹配处理器类型
  • handle 方法执行具体的调用逻辑
  • 返回 null 的 ModelAndView 表示已直接处理响应
  • 大多数场景使用 RequestMappingHandlerAdapter 即可

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

← 上一篇 Spring MVC 自定义参数解析器HandlerMethodArgumentResolver
下一篇 → Spring MVC 自定义HandlerMapping处理器映射器
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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