在控制器中使用基本URL时,我的静态资源不再可用

时间:2017-01-16 19:57:26

标签: spring-mvc spring-boot

我有一个基本的春季启动应用程序,我正在创建,我有一个管理员控制器,将给我一个/ admin / 的URL。我的问题是,这个URL会改变我访问静态资源的方式,方法是在URL上添加/ admin,而不是仅使用/

我该怎么做才能仍然可以从/ admin / ** URL访问我的静态资源,因为它们来自/ ** URL?

返回错误的示例请求: 获取http://localhost:8080/admin/css/bootstrap.min.css

以上请求可以处理此请求: 获取http://localhost:8080/css/bootstrap.min.css

但我不知道在Thymeleaf或Spring中删除前缀的好动态解决方案。真的不想在每个HTML页面上添加不同的东西。

我如何访问HTML页面上的资源:

    <link href="../../static/css/bootstrap.min.css"
      th:href="@{css/bootstrap.min.css}" rel="stylesheet"/>

我如何为控制器中的URL添加前缀:

@Controller
@RequestMapping("/admin")
public class AdminController {

@Autowired
ModelAndViewService modelAndViewService;

@RequestMapping(value = "/developer", method = RequestMethod.GET)
public String developer(Model model, Authentication authentication) {
    modelAndViewService.developerList(model,authentication);
    return "admin/developerList";
}

}

我将此添加到我的WebMvcConfigurerAdapter以尝试解决问题:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**","/admin/**")
            .addResourceLocations("/resources/");
}

任何帮助将不胜感激!希望这是一个简单的解决方案。

1 个答案:

答案 0 :(得分:0)

答案在于Thymeleaf href。

$keyboard = array(
    "inline_keyboard" => array(array(array("text" => "My Button Text", "callback_data" => "myCallbackData")))
);

对此进行了一些更改:

  • 不需要第二个href,只需要th:href。
  • th:href需要更改为'server relative'版本,该版本在th:href链接之前完成。

我的代码现在如下:

    <link href="../../static/css/bootstrap.min.css"
  th:href="@{css/bootstrap.min.css}" rel="stylesheet"/>

我已在整个应用程序中更改了此功能,它适用于所有不同的网址。无论请求URL是什么,prepended~都会使您的资源动态加载到从服务器返回的任何页面。

有关此内容的更多信息:Thymeleaf URL syntax document