注册"通用" @RequestMapping
我的资源处理程序停止了工作。
起初我有这个资源配置,有Thymeleaf:
@Value("${ty-resource}")
private String resource;
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/resources/**").addResourceLocations(resource);
}
我的资源不在项目之内,因此我的客户可以根据自己的意愿更新资源(他要求)。
一切都很好,我的资源来自${user.dir}/../webapp/resources/
然后我注册了@RequestMapping(value="/{department}/{category}/{subCategory}")
。
然后我的资源开始被这个请求映射响应,而不是来自资源处理程序。
我不知道如何解决这个问题。
我想到了这个:
@Value("${ty-resource}")
private String resourcesPath;
@RequestMapping('/resources')
public ModelAndView resources(@RequestParam("r") String resource) {
return new ModelAndView("redirect:"+resourcesPath+resource);
}
但我不认为这可能是最好的答案。
即使尝试此操作,因为@RequestMapping(value="/{department}/{category}/{subCategory}")
的注册时间早于@RequestMapping('/resources')
,我的资源会被@RequestMapping(value="/{department}/{category}/{subCategory}")
回复。
- 编辑 -
示例:
<script type="text/javascript" data-th-src="@{/resources/js/components.js}"></script>
此资源请求不是由资源处理程序响应的。
spring将其作为@RequestMapping(value="/{department}/{category}/{subCategory}")
答案 0 :(得分:0)
这就是我使用Thymeleaf加载资源的方式
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
并使用html中的绝对路径将资源加载为
<script th:src="@{/resources/js/validation.js}"></script>
请查看How to harness url in Spring MVC?所选答案。 希望这会有所帮助。
答案 1 :(得分:0)
我通过在控制器中实现Ordered
接口解决了这个问题。
所以我为控制器设置了一个更大的命令,我希望将其作为最后一个解决。