Spring MVC相当于ASP.NET RouteData

时间:2015-02-22 09:30:24

标签: java spring-mvc web-applications

我尝试提取请求路由数据,类似于ASP.NET中的RouteData对象,以获取请求的控制器和操作。 我试图在过滤器中做到这一点,但具体的Spring实现就足够了。

有没有办法解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:2)

这不能从过滤器内部完成。您必须使用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());
}