我正在尝试提取请求路由数据,类似于ASP.NET中的RouteData对象,以获取请求的控制器和操作。
我正在尝试在过滤器中执行此操作,但是特定的Spring实现就足够了。
有什么办法吗?
谢谢。
最佳答案
这不能从过滤器内部完成。您必须使用HandlerInterceptor
实现。在preHandle
方法中,您可以像这样获取PathVariables:
Map pathVariables = (Map)request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
这是一个简短的编译示例:
实现HandlerMapping接口:
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public class ParameterValidationHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
在应用程序中注册拦截器:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ParameterValidationHandlerInterceptor());
}