一尘不染

spring-boot-有条件地提供静态内容而无需模板引擎

spring-boot

我有一个静态页面,希望有条件地在特定URL上投放。
使用spring-
boot,我可以将页面放置在staticpublic资源目录中,并将它们提供给所有人,但是如果我想限制访问或通过功能标记禁用对它们的访问,那么这是不合适的。
使用模板引擎,我可以将页面作为模板加载,并返回对该视图的引用。但是,我的应用程序非常简单,当我不需要模板引擎时,我不想使用模板引擎。
我希望能够使用控制器来确定是否投放了该网页。控制器返回静态页面的最简单方法是什么?


阅读 293

收藏
2020-05-30

共1个答案

一尘不染

我发现从控制器返回静态内容的最简单方法是返回ResourceResource该类有多种实现,但ClassPathResource对于spring-
boot应用程序来说最有意义。
在常规的弹簧引导应用下面的例子将显示src/main/resources/path/to/mypage.htmlmycondition()true和返回404以其他方式。

@RequestMapping("mypage.html")
public Resource myPage() {
    if(mycondition()) {
        return new ClassPathResource("path/to/mypage.html");
    } else {
        throw new ResourceNotFoundException();
    }
}

@ResponseStatus(HttpStatus.NOT_FOUND)
private static class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException() {}
}
2020-05-30