Springboot 配置*.do请求

在我的工程里面,我想要配置在所有url后面都加上*.do,所以我配置如下:

 @Bean
    public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
        ServletRegistrationBean registration = new ServletRegistrationBean(
                dispatcherServlet);
        registration.addUrlMappings("*.do");
        return registration;
    }

这么配置的话,静态资源*.css等就404了。不配*.do倒是没问题。即使配置了:

@Configuration
public class CustomResoucesConfiguration extends WebMvcConfigurerAdapter{

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/static/js/");
        registry.addResourceHandler("/images/**").addResourceLocations("classpath:/static/images/");
    }
}

*.css等静态资源还是404。不懂大家有没有遇到过这个问题。

阅读 23k
3 个回答

没有测试过,我觉得所有的请求应该都会经过springboot的dispatcherServlet,那么css那些是不是也得最后加上.do呢?(springmvc+web.xml的方式倒是可以实现)

我想到的方法是用拦截器,手动判断请求是否包含.do。

话说为啥要.do呢?

先说一下思路:
1.dispatcherServlet会接管所有请求(包括静态资源请求),如果修改默认的UrlMapping为*.do,那么一定会导致静态资源无法加载。
2.仔细思考一下题主的的场景,目的希望所有*.do(扩展名)的请求,映射到controller中的method上。(对吗?)
3.那么问题就简单了,参考@RequestMapping所使用的规则

 * <p>The mapping matches URLs using the following rules:<br>
 * <ul>
 * <li>{@code ?} matches one character</li>
 * <li>{@code *} matches zero or more characters</li>
 * <li>{@code **} matches zero or more <em>directories</em> in a path</li>
 * <li>{@code {spring:[a-z]+}} matches the regexp {@code [a-z]+} as a path variable named "spring"</li>
 * </ul>

将映射规则调整为

/**
 * Created by wanye on 2017/5/20.
 */
@RestController // @Controller + @ResponseBody
@RequestMapping("**.do")
public class HelloController {

    @RequestMapping(name = "hello")
    public Map<String, String> hello(){
        Map<String, String> hello = new HashMap<String, String>();
        hello.put("data", "hello 小红");
        hello.put("status", "SUCCESS");
        return hello;
    }
}

当然这只是一个例子,题主可以将@RequestMapping("**.do")配置抽象到基类中。

新手上路,请多包涵
推荐问题
宣传栏