簡體   English   中英

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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM