【发布时间】:2018-08-09 13:24:28
【问题描述】:
我正在尝试为资源处理程序保留所有以/static/** 开头的路径。
不幸的是,我在请求映射中有一些从根路径/ 派生的通配符。像这样的:
我尝试了什么?
-
ResourceHandlerRegistry#setOrder:@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/resources/static/"); registry.setOrder(1); } -
各种版本的拦截器(有或无顺序):
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new ResourcesInterceptor()) .excludePathPatterns("/static/**") .order(2); }
这是一个半心半意的成功(如果我将映射更改为/{profile}/{project}/**,它甚至可能都行不通),因为:
/static/style/home.css # works
/static/style/home.cssxxx # 404, works
/static/style # catched by controller, expected: 404
/static # catched by controller, expected: 404
我发现了一些类似的问题,大部分没有答案或有一些肮脏的解决方案,例如:
- Exclude manually
staticpath in every controller with wildcard by regex - 更改您的映射
- Manage controllers order
- 创建指向
/static/**的专用控制器 - [...]
总结:
- 我不想用正则表达式,因为以后会很痛苦
- 我也无法更改映射。我知道,这是最简单的方法,但我就是做不到。
- 更改订单不起作用
- 创建专用控制器仍然存在一些路径问题
我正在寻找一个简单的解决方案,完全自动化,最好从配置中获得。问题是:实现这一目标的正确方法是什么?
【问题讨论】:
-
非常可爱的图片! :3 你用什么工具画的?
-
Gimp + Gaegu 字体 :)
-
最简单的解决方案:将映射从
/{profile}更改为/profiles/{profile}。这还具有巨大的优势,可以确保您不会与将来可能添加的所有其他端点(执行器、用户、问题、常见问题解答等)发生任何冲突 -
这不是休息服务,我应该提一下,我无法重新定义我的路径
-
您是在避免,而不是在解决问题。正如我所说,我无法更改映射,因此这些考虑毫无意义。我知道冲突,我正在寻找最好的方法,让它发挥作用。这是一个类似 github 的服务,这些路径非常重要。
标签: java spring spring-mvc spring-boot