从Spring控制器返回HTML页面

时间:2018-11-14 09:35:00

标签: java spring spring-mvc spring-boot

我有一个Spring Boot应用程序设置为REST API。我现在还希望能够为客户端提供简单的HTML页面,而无需在任何模板引擎(如Thymeleaf)上使用。我希望通过我已经在我的应用程序中使用的WebSecurityConfigurerAdapter来访问HTML页面,使其不受Spring Security设置的相同安全约束。


我尝试过使用Controller

@Controller
public class HtmlPageController {
    @RequestMapping(value = "/some/path/test", method = RequestMethod.GET)
    public String getTestPage() {
        return "test.html";
    }
}

并将test.html文件放在/resources/test.html/webapp/WEB-INF/test.html中。

每次尝试访问localhost:8080/some/path/test的页面时,都会返回404

我如何进行这项工作?

4 个答案:

答案 0 :(得分:1)

您的html,js和css文件应位于src / main / resources / static目录下。和您的return语句,您可以尝试删除.html。

@RestController
public class HtmlPageController {
    @GetMapping("/some/path/test")
    public String getTestPage() {
        return "test";
    }
}

答案 1 :(得分:1)

存在一种Spring MVC机制,可以提供静态资源。

在config类中,覆盖此方法:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
        .addResourceHandler("some/path/*.html")
        .addResourceLocations("/static/");
}

并将html文件放置在src/main/webapp/static/文件夹中。

如果您请求some/path/test.html(请注意.html),它将返回位于static文件夹中的test.html文件。

您显然可以使用其他文件夹或更复杂的目录结构。

这样,您不必创建控制器。请注意,您的配置类应实现WebMvcConfigurer

答案 2 :(得分:1)

Okey显然是Spring Boot支持的,不需要任何其他配置或控制器。

我要做的就是将HTML文件放在正确的目录/resources/static/some/path/test.html中,可以在localhost:8080/some/path/test.html处找到它。

在尝试更改从中提供文件的目录时,我没有成功。 It seems that提供单独的@EnableWebMvc(配置资源处理程序所需)破坏了Spring Boot的配置。但是我可以使用默认的/static目录。

答案 3 :(得分:0)

请参见tutotrial example如何在Spring MVC配置中定义html视图

@Bean
public InternalResourceViewResolver htmlViewResolver() {
    InternalResourceViewResolver bean = new InternalResourceViewResolver();
    bean.setPrefix("/WEB-INF/html/");
    bean.setSuffix(".html");
    bean.setOrder(2);
    return bean;
}
  • setOrder设置为2,因为它在示例中还包括JSP支持

此外,您需要更改为不带后缀.html的退货

return "test.html";