Spring MVC 相当于 ASP.NET RouteData
Spring MVC equivalent to ASP.NET RouteData
我正在尝试提取请求路由数据,类似于 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());
}
我正在尝试提取请求路由数据,类似于 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());
}