如果我们在HandlerInterceptor中替换了HttpServletRequest,在HandlerMethodArgumentResolver中所使用的HttpServletRequest会是我们替换那个吗
时间: 2023-11-01 11:49:05 浏览: 131
在 Spring MVC 中,HandlerInterceptor 和 HandlerMethodArgumentResolver 是处于不同的阶段进行处理的。
HandlerInterceptor 是在请求进入 Controller 之前或之后进行拦截的,它可以修改请求或响应对象,在拦截器链中可以有多个拦截器。当你在 HandlerInterceptor 中替换了 HttpServletRequest 对象,仅仅是在拦截器链中对该请求进行了修改,并不会影响到后续的处理过程。
HandlerMethodArgumentResolver 是用于解析方法参数的组件,它在处理请求时会根据参数类型和注解等信息来解析请求中的参数,并将解析后的参数传递给 Controller 方法。它是在请求进入 Controller 方法之前进行处理的,而且对于每个请求只会执行一次。
因此,如果你在 HandlerInterceptor 中替换了 HttpServletRequest 对象,在 HandlerMethodArgumentResolver 中使用的 HttpServletRequest 对象不会受到影响,仍然是原始的 HttpServletRequest 对象。
如果你希望在整个请求处理过程中使用替换后的 HttpServletRequest 对象,可以考虑自定义一个包装类,实现 HttpServletRequest 接口,并在 HandlerInterceptor 中将包装类作为替代传递给后续组件,这样在 HandlerMethodArgumentResolver 中使用的 HttpServletRequest 对象就是你替换后的对象了。
阅读全文