我有以下方法处理所有与另一路径不匹配的请求。
@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) {
...
}