我有以下方法可以处理所有与另一个路径不匹配的请求。
@RequestMapping(value = "/**")
public void doUrlRequest(final HttpServletRequest request, HttpServletResponse response) {
但是,正在调用诸如/css/style.css
和/images/logo.png
之类的路径,导致它们无法加载。是否可以将其推到较低的优先级,以便它是匹配的最后一条路径?我需要处理/tag/channel
之类的请求。
在Rails中,这等效于将路径移动到routes.rb
的底部。
答案 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) {
...
}