Spring MVC 1到1将URL映射到.HTML而不暴露路径

时间:2015-03-31 21:52:14

标签: java spring spring-mvc servlets spring-boot

我在不提供任何JSP的Web服务上使用Spring 4.1.5和Boot 1.2。我不想添加JSP servlet,但我希望它能够提供一个单一的canary页面,以更漂亮的html类型格式显示将在/manage/health端点提供的信息。

我在webapp/canary/canary.html中有一个文件我想从网址www.mywebservice.com:9343/canary提供这个文件,就像那样,不是canary.html

我试过这样做:

@Configuration
public class CanaryConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/canary")
                .addResourceLocations("/canary/canary.html");
    }
}
然而,这并不起作用。

期望处理程序提供文件名。因此,在其他方面,位置应该类似于:/canary/

并且处理程序类似于:/canary/**

这样,网址www.mywebservice.com:9343/canary/canary.html就像魅力一样。

但是,我希望网址可以解析www.mywebservice.com:9343/canarywebapp/canary/canary.html,而无需输入html。

这在jsp servlet中非常简单,因为你可以设置后缀ect ...

我看了ResourceResolver,但我对如何将其链接到我当前的配置中没有任何意义。

看起来像我想要的那样:

  

提供解析对实际资源的传入请求以及获取客户端在请求资源时应使用的公共URL路径的机制。

请参阅:ResourceResolver Documentation

任何帮助都会非常有益。

我非常清楚我可以将html放在资源/静态和其他几个自动配置的地方。这总是需要键入.html,这不是我想要的,所以不会工作。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用视图控制器来执行此操作。这是一个例子。希望这会有所帮助。

    public class AppConfig extends WebMvcConfigurerAdapter {

        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/canary").setViewName("/canary/canary.html");
        }
}

注意:如果您使用的是tomcat,则可能必须将jsp servlet配置为服务器html文件。

Related post here

答案 1 :(得分:0)

为了便于参考,所选答案与以下内容相同:

@Controller
public class CanaryController {

    @RequestMapping(value="/canary", method=RequestMethod.GET)
    public String getCanary() {
        return "/canary/canary.html";
    }
}

只要canary文件夹中有webapp(或任何文件/文件夹),上述代码就会有效。

当我尝试这个时,我试图在我的YAML(.yml)文件中将后缀设置为.html并且它不起作用我认为如果它不是RestController它需要返回到servlet。我误解了。