HandlerInterceptor
接口有一个参数Object handler
,这意味着实现代码必须对处理程序对象进行类型判断才能使用它,并根据需要强制转换它.
我发现的代码片段似乎假定处理程序始终是HandlerMethod
对象,如果不是这样,则返回true,但我想理解为什么这似乎是一个常见的实现,可以实现健壮的实现.
实现此接口的标准方法似乎是:
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
if (handler instanceof HandlerMethod) {
// ...
return x; // whether or not to proceed with execution
}
return true; // fallback value in case handler wasn't a HandlerMethod
}
}
Spring javadoc似乎忽略了一个事实,即接口中有一个对象类型,这对我理解这个接口非常没有帮助.
一些可能有助于我理解该接口应该如何实现的问题:
- 如果我们得到的处理程序不是我们期望的对象,为什么
true
是一个合理的默认值? -
HandlerInterceptor
可以接受哪些类型的handler
参数? - 在什么情况下,
handler
可能是另一种类型(如果有的话)? - 为什么它是
Object
而不是HandlerMethod
参数?