我有一个基于Spring MVC的应用程序。我想在到达控制器之前修改请求URI。例如,控制器的RequestMapping为“ abc / xyz”,但即将到来的请求为“ abc / 1 / xyz”。我想修改传入请求以将其映射到控制器。
解决方案1:实现拦截器并修改传入的请求URI。但是这里的问题是,因为没有控制器与URI模式“ abc / 1 / xyz”匹配,所以它甚至都没有进入拦截器。(如果有的话,我可能会缺少启用它的功能)将两个URI都作为控制器的请求映射。
还有什么其他解决方案?有没有办法在春天之前处理这个请求。正如在web.xml的过滤器中处理它一样,我只是在弥补它。
您可以编写一个servlet Filter,该servlet 包装HttpServletRequest并为该方法返回不同的值getRequestURI。像这样:
Filter
HttpServletRequest
getRequestURI
public class RequestURIOverriderServletFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) { @Override public String getRequestURI() { // return what you want } }, response); } // ... }
Servlet过滤器配置必须添加到中web.xml。
web.xml
但真诚的是,可能还有其他方法可以解决您的问题,除非您有充分的理由,否则不应该这样做。