是否有可能降低请求映射的优先级,使其在Spring Boot路径检查的最后出现?

时间:2018-09-30 20:42:08

标签: spring spring-mvc spring-boot

我有以下方法可以处理所有与另一个路径不匹配的请求。

@RequestMapping(value = "/**")
public void doUrlRequest(final HttpServletRequest request, HttpServletResponse response) {

但是,正在调用诸如/css/style.css/images/logo.png之类的路径,导致它们无法加载。是否可以将其推到较低的优先级,以便它是匹配的最后一条路径?我需要处理/tag/channel之类的请求。

在Rails中,这等效于将路径移动到routes.rb的底部。

1 个答案:

答案 0 :(得分:1)

使用/**处理您的请求绝不是一个好主意。使用特定的处理程序方法以@RequestMapping进行标记。此外,还需要使用静态资源处理程序来处理静态资源。在扩展WebMvcConfigurerAdapter的配置类中,您需要为此类资源添加处理程序。这是此类文件的示例:

@Configuration
public class WebConfigurations extends WebMvcConfigurerAdapter {

    private static final String[] CLASSPATH = {"classpath:/static/"};

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);
        if (!registry.hasMappingForPattern("/**")) {
            registry.addResourceHandler("/**")
                    .addResourceLocations(CLASSPATH);
        }
    }
}

此配置假定您的静态资源是从resources/static目录提供的。

编辑: 正如您在评论中提到的那样,您希望处理/tag1/channel1之类的请求,一种不错的方法是使用路径变量。下面的注释应该可以解决问题: @RequestMapping("/{tag}/{channel}"),并在controller方法中使用基于String的参数。这是一个示例:

@RequestMapping("/{tag}/{channel}")
public String usefulMethodName(@PathVariable String tag, @PathVariable String channel) {
    ...
}