一尘不染

在Spring MVC中修改请求URI

spring-mvc

我有一个基于Spring MVC的应用程序。我想在到达控制器之前修改请求URI。例如,控制器的RequestMapping为“ abc /
xyz”,但即将到来的请求为“ abc / 1 / xyz”。我想修改传入请求以将其映射到控制器。

解决方案1:实现拦截器并修改传入的请求URI。但是这里的问题是,因为没有控制器与URI模式“ abc / 1 /
xyz”匹配,所以它甚至都没有进入拦截器。(如果有的话,我可能会缺少启用它的功能)将两个URI都作为控制器的请求映射。

还有什么其他解决方案?有没有办法在春天之前处理这个请求。正如在web.xml的过滤器中处理它一样,我只是在弥补它。


阅读 706

收藏
2020-06-01

共1个答案

一尘不染

您可以编写一个servlet Filter,该servlet
包装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

但真诚的是,可能还有其他方法可以解决您的问题,除非您有充分的理由,否则不应该这样做。

2020-06-01