首页 > 解决方案 > 是否可以在 Spring Boot 中的路径检查的最后降低请求映射的优先级?

问题描述

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

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

但是,它被称为路径之类的/css/style.css/images/logo.png导致它们不加载。是否可以将其推到较低的优先级,使其成为匹配的最后一条路径?我需要处理像/tag/channel.

在 Rails 中,这相当于将路径移动到routes.rb.

标签: springspring-mvcspring-boot

解决方案


/**用它来处理您的请求从来都不是一个好主意。使用特定的处理程序方法来标记它们@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}")并在控制器方法中使用String基于参数。这是一个示例:

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

推荐阅读