是否可以降低请求映射的优先级,使其在 Spring Boot 中的路径检查结束时出现?



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

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

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

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

使用/**来处理您的请求从来都不是一个好主意。使用特定的处理程序方法用@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) {
...
}

最新更新