spring - 是否可以在 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) {
...
}
推荐阅读
- c++ - 如果在着色器中未使用绑定属性位置,它们是否会受到惩罚?
- alexa - 列出自定义 Alexa 技能
- sql - 检查 B 上的外部约束时读取块 A
- sql-server - 如何在sql server Trigger AFTER Update Statement中获取以前的值
- javascript - Javascript 验证表单检查 textarea 长度
- python - 数据框每列中的最小值,不包括零
- ios - 从网站更改 iOS 键盘颜色?
- php - PHP中的按键函数对数组进行排序
- django - 如何在 Django rest 框架中执行删除操作?
- python - ModuleNotFoundError:没有名为“gitlab”的模块